MYSQL - 如果选择日期没有行,如何设置为零

时间:2016-04-07 10:20:47

标签: mysql datetime

我想从给定日期和同一时间选择值,如果该日期没有行,那么它应该在该特定日期返回0。这是我的查询

SELECT
    sum(`value`) AS `VALUE`,
    serverTimeStamp AS date
FROM
    table1 t1

WHERE
    serverTimeStamp BETWEEN CONVERT_TZ(
        '2016-03-21 00:00:01',
        '+00:00',
        '-05:30'
    )
AND CONVERT_TZ(
    '2016-03-25 23:30:36',
    '+00:00',
    '-05:30'
)
GROUP BY
    YEAR (date),
    MONTH (date),
    WEEK (date),
    DAY (date)
ORDER BY
    date ASC;

输出:

值日期

96 2016-03-21 00:00:01

76 2016-03-23 00:00:01

56 2016-03-25 00:00:01

预期产出:

值日期

96 2016-03-21 00:00:01

0 2016-03-22 00:00:01

76 2016-03-23 00:00:01

0 2016-03-24 00:00:01

56 2016-03-25 00:00:01

有什么想法实现这个目标吗?

table1:

**id value serverTimeStamp**

 1   96 2016-03-21 00:00:01

  2  76 2016-03-23 00:00:01

 3  56 2016-03-25 00:00:01  

但是如果在给定日期没有行,那么我期待查询,那么它应该是0,具体日期如下

值日期

96 2016-03-21 00:00:01

0 2016-03-22 00:00:01

76 2016-03-23 00:00:01

0 2016-03-24 00:00:01

56 2016-03-25 00:00:01

2 个答案:

答案 0 :(得分:0)

Create a stored procedures and do like below to get your desired output

create table temp_data
(
id int,
value int,
server_date datetime 
);

Drop temporary table if exists temp_generate_dates; 
create temporary table temp_generate_dates 
( 
temp_date datetime 
); 

insert into temp_generate_dates 
select adddate('2016-03-21 00:00:01', @num:=@num+1) as date 
from 
temp_data, 
(select @num:=-1) num 
limit 5; 


select coalesce(t1.value,0),t2.temp_date from temp_generate_dates t2 
left join temp_data t1 on t2.temp_date = t1.server_date ;

答案 1 :(得分:0)

您需要创建一个存储可能日期的表,然后将查询LEFT JOIN连接到该表,以便查询中缺少的每个日期仍将包含在输出中,但值为0.

如何使用日期生成数据到表格中:Generate series equivalent in MySQL

您只需要更改此查询,以便在日期中包含INSERT INTO表。

然后,根据您插入日期的方式(时间 - 如果它来自您的查询是静态的,还是没有时间 - 如果它正在发生变化),您需要将该表与现有查询一起加入如果列值包含时间,或者如果它不包含在从您的查询中serverTimeStamp中提取的日期部分,则列值