2013-10-31 39 views
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的语法来做到吗? :)

回答

0

您可以使用BETWEEN

SELECT COUNT(*) 
FROM Interval 
WHERE @noon_timestamp BETWEEN start AND finish 
+0

你缺少GROUP BY一天。也许'GROUP BY DAYOFYEAR(开始)' – Linger

+0

@Linger如果我理解正确,他将在这些日子里迭代'@ noon_timestamp',他希望每个值的总和。 – Barmar

+0

这就是我正在寻找的结果,但我试图避免多次运行查询。我真的很想找到一种使用GROUP BY的方法,但由于许多时间间隔超过一天,所以不能一天一组。 – RedBrogdon