Я использую SQL Server 2008, и мне нужна помощь в написании запроса, который сравнивает две последовательные записи.Попытка сравнить две последовательные записи
select recordDate
from SiteHistory
where siteId = 556145
and isRecent = 0
and isRunning = 1
order by
recordDate DESC
дает мне около 2000 строк, выглядит следующим образом:
recordDate
-----------------------
2013-05-08 20:04:23.357
2013-05-08 19:45:26.417
2013-05-08 19:30:24.810
2013-05-08 19:17:22.843
2013-05-08 19:00:16.017
2013-05-08 18:44:14.230
.....
.....
Теперь мне нужно сравнить дату каждой строки со следующей строкой и подсчитать, сколько раз разницы между двумя последовательными датами более 15 минут. Это то, что я мог придумать до сих пор:
;with temp as(
select row_number()over(order by recordDate DESC)as 'row', recordDate
from SiteHistory
where siteId = 556145 and isRecent =0 and isRunning=1
)
select COUNT(*) as Count from temp t1
INNER JOIN temp t2 ON t2.row = t1.row+1
where DATEDIFF(mm,t1.recordDate,t2.recordDate)>15
Однако это не дает мне желаемого. Пожалуйста, дайте мне знать, как я могу исправить это в соответствии с моими требованиями.
Каков реальный выход? Кроме того, имеет ли SQL Server функцию 'lag()' window? –
Какая версия SQL Server? И каким образом вы не получаете ожидаемых результатов? Покажите конкретные примеры, демонстрирующие требуемые угловые случаи. – MatBailie
Как я уже упоминал, я использую SQL Server 2008. Если вы посмотрите на записи, по крайней мере несколько записей, где разница между последовательными временами больше 15 минут. Поэтому я ожидаю подсчет, который по крайней мере больше 1, но я получаю счет 0. И, насколько мне известно, я не думаю, что SQL-сервер имеет функцию lag(). –