Альтернатива LIMIT 1 для извлечения диапазона дат плюс первая запись до и после? - PullRequest
1 голос
/ 01 апреля 2011

Как правило, я хочу выбрать в диапазоне + 1 запись после и 1 запись до.

Я пытался так:

SELECT DateTime, value FROM ReadingGlucoseBlood WHERE DateTime BETWEEN '2011-01-21 00:00:00' AND datetime('2011-01-21 00:00:00', '+24 hours') 
UNION 
SELECT DateTime, value FROM ReadingGlucoseBlood WHERE DateTime < '2011-01-21 00:00:00' LIMIT 1
UNION
SELECT DateTime, value FROM ReadingGlucoseBlood WHERE DateTime > datetime('2011-01-21 00:00:00', '+24 hours') LIMIT 1
ORDER BY DateTime ASC

Но оказывается, что у меня может быть только один LIMIT в самом конце составного оператора SELECT ... так как мне добиться этого эффекта? (используя sqlite кстати)

1 Ответ

2 голосов
/ 01 апреля 2011

Вам необходимо запросить ПРЕДЕЛЫ, чтобы ограничить их область действия

SELECT DateTime, value FROM ReadingGlucoseBlood WHERE DateTime BETWEEN '2011-01-21 00:00:00' AND datetime('2011-01-21 00:00:00', '+24 hours') 
UNION ALL
SELECT * FROM (
SELECT DateTime, value FROM ReadingGlucoseBlood WHERE DateTime < '2011-01-21 00:00:00'
ORDER BY DateTime DESC LIMIT 1
) X
UNION ALL
SELECT * FROM (
SELECT DateTime, value FROM ReadingGlucoseBlood WHERE DateTime > datetime('2011-01-21 00:00:00', '+24 hours')
ORDER BY DateTime ASC LIMIT 1
) Y
ORDER BY DateTime ASC
...