SQL Query用于检索两个日期之间的字段列表

时间:2017-01-19 04:18:58

标签: java mysql

我有一个表,其中有两列,即startTime和endTime(都是DateTime数据类型)还有另一列'持续时间'它计算了这两者之间的差异。我想检索特定日期之间的持续时间,如June10-June20。问题是我在同一个日期有很多行,而且这个范围之间几乎没有日期。我需要绘制指定范围的图形。因此,当特定日期没有条目时,我必须将零附加到输出,并且必须将类似日期的值加在一起并作为单个值返回。因此,输出行应该等于指定的天数。 Click here for Example 提前完成。

1 个答案:

答案 0 :(得分: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:=@i+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