このクエリを書くためのより良い方法があるはずです。
日付のペアの間のすべてのデータを選択したいと思います。理想的には、結果セットの最初と最後の行は、WHERE句で指定された行になります。それらの行が存在しない場合は、要求された範囲の前後の行が必要です。
例:
私のデータが次の場合:
...
135321, 20090311 10:15:00
135321, 20090311 10:45:00
135321, 20090311 11:00:00
135321, 20090311 11:15:00
135321, 20090311 11:30:00
135321, 20090311 12:30:00
...
そして、クエリは次のとおりです。
SELECT *
FROM data_bahf
WHERE param_id = 135321
AND datetime >= '20090311 10:30:00'
AND datetime <= '20090311 12:00:00'
返されるデータには、10:15の行と12:30の行を含める必要があります。WHERE句を厳密に満たすものだけではありません。
これは私が思いついた最高のものです。
SELECT * FROM (
SELECT *
FROM data_bahf
WHERE param_id = 135321
AND datetime > '20090311 10:30:00'
AND datetime < '20090311 12:00:00'
UNION
(
SELECT * FROM data_bahf
WHERE param_id = 135321
AND datetime <= '20090311 10:30:00'
ORDER BY datetime desc
LIMIT 1
)
UNION
(
SELECT * FROM data_bahf
WHERE param_id = 135321
AND datetime >= '20090311 12:00:00'
ORDER BY datetime asc
LIMIT 1
)
)
AS A
ORDER BY datetime
(今のところSELECT *の使用は無視してください)
編集:param_id、datetime、および(param_id、datetime)にインデックスがあります