如果日期不存在,MySQL选择带有预定义值的日期 [英] MySQL select date with predefined values if date not exist

查看:63
本文介绍了如果日期不存在,MySQL选择带有预定义值的日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下MySQL查询:

I've got following MySQL query:

SELECT Date,
       Fail/(Success + Fail + NA) AS  'Rate'
FROM (
    SELECT CAST( s.date_str AS DATE ) AS  'Date',
           SUM(CASE WHEN k.result = 'SUCCESS' THEN 1 ELSE 0 END) Success,
           SUM(CASE WHEN k.result = 'FAIL' THEN 1 ELSE 0 END) Fail,
           SUM(CASE WHEN k.result != 'FAIL' AND k.result != 'SUCCESS' THEN 1 ELSE 0 END) NA 
    FROM Session s, KPI k
    WHERE s.id = k.session_id
    GROUP BY Date
)subQuery

例如,显示此结果

日期|费率
.....................
2015-10-15 |0.0836
2015-10-16 |0.0279
2015-10-19 |0.1569
2015-10-21 |0.2756

Date | Rate
.....................
2015-10-15 | 0.0836
2015-10-16 | 0.0279
2015-10-19 | 0.1569
2015-10-21 | 0.2756

因此,它仅在有数据时显示结果.我想要实现的是,当没有数据时,它将显示下一个日期和汇率0.0000,因此在该示例中,它看起来像这样:

So it shows only result when there's some data.. What I'd like to achieve is when there's no data it shows next date and rate 0.0000 so in that example it'd looks like this:

日期|费率
.....................
2015-10-15 |0.0836
2015-10-16 |0.0279
2015-10-17 |0.0000
2015-10-18 |0.0000
2015-10-19 |0.1569
2015-10-20 |0.0000
2015-10-21 |0.2756

Date | Rate
.....................
2015-10-15 | 0.0836
2015-10-16 | 0.0279
2015-10-17 | 0.0000
2015-10-18 | 0.0000
2015-10-19 | 0.1569
2015-10-20 | 0.0000
2015-10-21 | 0.2756

我该如何实现?

推荐答案

您需要连接到至少具有30行的另一个表,以制造数据集中不存在的任何日期.像这样:

You'll need to join to another table that has at least 30 rows to manufacture any dates that do not exist in the data set. Something like:

 select * from(
     select curdate() - interval @rn := @rn + 1 day as last_30_date
     from table_with_at_least_30_rows
     join (select @rn := -1) rows limit 30
 ) days
 left join (select curdate() as data_date) d on last_30_date = data_date;

用查询替换选择curdate()作为data_date .

这篇关于如果日期不存在,MySQL选择带有预定义值的日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆