如何选择不按特定时间分组的今天和明天数据计数?

时间:2019-06-03 16:40:51

标签: mysql sql

我有一张桌子,像下面的桌子。 我想选择按天计数和分组。

但是1天的数据将从7:00:00开始计数,直到明天的6:59:59(24小时)。

例如

“ 2019/06/01 7:00:00”到“ 2019/06/02 06:59:59”之间的第1天数据

“ 2019/06/02 7:00:00”和“ 2019/06/03 06:59:59”之间的第2天数据

我该如何编码where条件?

id | create_date | judge | -----+---------------------+---------+ 1 | 2019-06-02 8:00:00 | ok | 2 | 2019-06-02 9:00:00 | ok | 3 | 2019-06-02 10:00:00 | ok | 4 | 2019-06-02 11:00:00 | ok | 5 | 2019-06-02 15:00:00 | ok | 6 | 2019-06-03 4:00:00 | ok | 7 | 2019-06-03 5:00:00 | ok | 8 | 2019-06-03 8:00:00 | ok | 9 | 2019-06-03 9:00:00 | ok | 10 | 2019-06-03 9:00:00 | fail |

我在下面尝试过,但结果与预期不符。

SELECT COUNT(*),DAY(create_date) FROM mytable WHERE judge = 'ok' and MONTH(create_date) = '6' and YEAR(create_date) = '2019' and TIME(create_date) > '07:00:00' Group by DAY(create_date) order by DAY(create_date) ASC

预期结果   COUNT(*) | DAY(create_date) | -----------+---------------------+ 7 | 2 | (from id 1 to 7) 2 | 3 | (from id 8 and 9)

3 个答案:

答案 0 :(得分:0)

只需减去7个小时即可进行汇总和日期/时间比较:

SELECT DATE(create_date - interval 7 hour) as dte, COUNT(*) 
FROM mytable
WHERE judge = 'ok' and 
      create_date >= '2019-06-01 07:00:00' AND
      create_date < '2019-07-01 07:00:00'
GROUP BY DATE(create_date - interval 7 hour) 
ORDER BY dte;

答案 1 :(得分:0)

试试这个-

SELECT 
CAST(DATE_SUB(create_date, INTERVAL 7 HOUR) AS DATE),
COUNT(*) 
FROM YOUR_TABLE
GROUP BY CAST(DATE_SUB(create_date, INTERVAL 7 HOUR) AS DATE)

答案 2 :(得分:0)

您可以从每个日期中减去七个小时,将它们截断以仅显示日期,然后将它们分组:

SELECT   DATE(DATE_SUB(create_date, INTERVAL 7 HOUR)), COUNT(*)
FROM     mytable
-- Where clause if you need it...
GROUP BY DATE(DATE_SUB(create_date, INTERVAL 7 HOUR))