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

最小の開始と最大の終了を照会してから、これを行うことで、これを残酷に行うことができます。

SELECT count(id) FROM Interval 
WHERE start <= @noon_timestamp AND finish >= @noon_timestamp

範囲内の毎日ですが、それは醜く恐ろしいようです。

それをより良くする方法はありますか?もしそうなら、SqlAlchemy の構文でそれを行うことができますか? :)

4

1 に答える 1

0

使用できますBETWEEN

SELECT COUNT(*)
FROM Interval
WHERE @noon_timestamp BETWEEN start AND finish
于 2013-10-31T23:49:03.337 に答える