2017-01-19 96 views
-1

我有一个表,其中有两列,即startTime和endTime(都是DateTime数据类型)有另一列'持续时间',计算这两个之间的差异。我想在6月10日至6月20日之间的特定日期之间检索持续时间。问题是我有很多行相同的日期和几个日期之间甚至不存在甚至存在。我需要绘制指定范围的图表。因此,当某一天没有条目时,必须将零附加到输出,并且必须将相似日的值加在一起并作为单个值返回。所以,输出行应该等于指定的天数。 Click here for Example Thanx提前。SQL查询检索两个日期之间的字段列表

+0

的例子添加到您的问题表,人们可能不会点击一个链接,以获取更多信息 – xkcd149

+0

感谢您响应。缩进存在问题,因此我选择了此选项。 – Venky

回答

0

假设每行中的开始日期和结束日期只会在时间分量上有所不同。 另外,假设您没有任何其他列出日期的表,并且您需要一个动态表来列出给定范围之间的所有日期。 您可以执行以下操作。

select list_of_dates.date, ifnull(sum(your_table.duration),0) 
from your_table 
right join 
(SELECT DATE(ADDDATE('2016-06-20', INTERVAL @i:[email protected]+1 DAY)) AS date 
FROM your_table, 
(select @i:=-1) local 
HAVING 
@i < DATEDIFF('2016-06-25', '2016-06-20')) list_of_dates 
on list_of_dates.date = date(your_table.start_date) 
group by list_of_dates.date 

如果您有相关的存储日历变得越来越容易

select calendar_table.date, ifnull(sum(your_table.duration),0) 
from your_table 
right join 
calendar_table 
on calendar_table.date = date(your_table.start_date) 
where calendar_table.date >= '2016-06-20' and calendar_table.date <= '2016-06-25' 
group by calendar_table.date 
相关问题