1
想象一个MySQL表看起来像这样:针对多天间隔的表格进行查询,按天分组计数?
Interval
--------------------------
id INT, NOT NULL
start DATETIME, NOT NULL
finish DATETIME, NOT NULL
我想产生跨越中午一系列间隔天数数的高效的查询。所以,如果我有看起来像这样的数据:
id start finish
-------------------------------------------------
1 2013-01-12 08:00:00 2013-01-17 02:00:00
2 2013-01-12 15:00:00 2013-01-13 18:00:00
3 2013-01-13 08:00:00 2013-01-13 09:00:00
4 2013-01-14 11:00:00 2013-01-15 08:00:00
5 2013-01-14 02:00:00 2013-01-17 01:00:00
6 2013-01-15 20:00:00 2013-01-16 08:00:00
我可以运行它,并收到一个结果集是这样的:
Timestamp Count
-----------------------------
2013-01-12 12:00:00 1
2013-01-13 12:00:00 2
2013-01-14 12:00:00 3
2013-01-15 12:00:00 2
2013-01-16 12:00:00 2
我可以brutishly通过查询最小启动和最大做到这一点完成,然后这样做:
SELECT count(id) FROM Interval
WHERE start <= @noon_timestamp AND finish >= @noon_timestamp
在范围内的每一天,但这似乎丑陋和可怕。
有没有办法做得更好?如果是这样,你可以用SqlAlchemy的语法来做到吗? :)
你缺少GROUP BY一天。也许'GROUP BY DAYOFYEAR(开始)' – Linger
@Linger如果我理解正确,他将在这些日子里迭代'@ noon_timestamp',他希望每个值的总和。 – Barmar
这就是我正在寻找的结果,但我试图避免多次运行查询。我真的很想找到一种使用GROUP BY的方法,但由于许多时间间隔超过一天,所以不能一天一组。 – RedBrogdon