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