想象一个如下所示的 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
我可以通过查询最小开始和最大结束来粗暴地做到这一点,然后这样做:
SELECT count(id) FROM Interval
WHERE start <= @noon_timestamp AND finish >= @noon_timestamp
范围内的每一天,但这看起来既丑陋又可怕。
有没有办法做得更好?如果是这样,你能用 SqlAlchemy 的语法来做吗?:)