SQL或DQL,从一开始就按计数分组,直到现在

时间:2015-09-15 10:15:55

标签: mysql sql symfony

我正在尝试编写一个查询,选择所有"引导",并按当天的每小时计数对它们进行分组。

示例:

lead 1: created today, 08.30
lead 2: created today, 09.30
lead 3: created today, 09.40

我需要一个结果,例如:

小时:0,领先0

小时:1,领先0

...

小时:8,领导1

小时:9,领先2

小时:9,领先2

小时:10,领先0

从一开始就需要,这就是我所拥有的,但它返回的结果不正确。

SELECT HOUR(created) AS `HOUR`, COUNT(*)
FROM lead
WHERE created >= CURDATE() - INTERVAL 1 DAY
GROUP BY HOUR(created)

我正在使用symfony,所以使用DQL这样做也很好。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

使用此

SELECT hrs.h AS `HOUR`, IFNULL(l.cnt, 0) AS lead_count FROM
(SELECT 0 AS h UNION ALL SELECT 1 AS h UNION ALL SELECT 2 AS h UNION ALL SELECT 3 AS h UNION ALL SELECT 4 AS h UNION ALL SELECT 5 AS h UNION ALL SELECT 6 AS h UNION ALL SELECT 7 AS h UNION ALL SELECT 8 AS h UNION ALL SELECT 9 AS h UNION ALL SELECT 10 AS h UNION ALL SELECT 11 AS h UNION ALL SELECT 12 AS h UNION ALL SELECT 13 AS h UNION ALL SELECT 14 AS h UNION ALL SELECT 15 AS h UNION ALL SELECT 16 AS h UNION ALL SELECT 17 AS h UNION ALL SELECT 18 AS h UNION ALL SELECT 19 AS h UNION ALL SELECT 20 AS h UNION ALL SELECT 21 AS h UNION ALL SELECT 22 AS h UNION ALL SELECT 23 AS h UNION ALL SELECT 24 AS h) hrs
LEFT OUTER JOIN
(SELECT HOUR(created) AS h, COUNT(*) AS cnt FROM lead WHERE created >= CONCAT(CURDATE(), ' 00:00:00') GROUP BY 1) l ON l.h = hrs.h