一尘不染

如何在MySQL的无行日中每天对行数进行分组?

sql

所以我有这张桌子。它有几百行。每行中都有一个日期时间字段。我需要完成的是获取给定时间段内有多少行,而不是整个时间段,而是该时间段的每一天。到此为止,我知道该怎么办。但是,此外,我还需要在表中没有值0的日期的行。

因此,例如:

2012-01-01 12:13
2012-01-01 43:32
2012-01-03 23:32

应该给我这样的结果:

2012-01-01 2
2012-01-02 0
2012-01-03 1

任何人都可以帮忙吗?


阅读 141

收藏
2021-03-08

共1个答案

一尘不染

为了处理带有0条对应记录的日期,我的常规做法是使用日历表进行联接。

例如,创建一个表,其中一个字段称为,calendar_date并在其中填充从1st Jan 2000到的每个日期31st Dec 2070,或其他适合您报表目的的范围。

然后使用类似…

SELECT
  calendar.calendar_date,
  COUNT(*)
FROM
  calendar
LEFT JOIN
  yourData
    ON  yourData.timeStamp >= calendar.calendar_date
    AND yourData.timeStamp <  calendar.calendar_date + 1
WHERE
      calendar.calendar_date >= '01 Jan 2012'
  AND calendar.calendar_date <  '04 Jan 2012'
GROUP BY
  calendar.calendar_date

该表可以有许多其他用途,例如标记银行假期,几周和几个月的开始。通过谨慎使用标志和索引,您可以从中获得很多收益。

2021-03-08