我想从给定日期和同一时间选择值,如果该日期没有行,那么它应该在该特定日期返回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
答案 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
中提取的日期部分,则列值