У меня есть таблица, которая содержит следующее:
DataDate Value
2010-03-01 08:31:32.000 100
2010-03-01 08:31:40.000 110
2010-03-01 08:31:42.000 95
2010-03-01 08:31:45.000 101
. .
. .
. .
Я должен умножить столбец значений на разницу во времени между текущими и предыдущими строками и суммой это в течение всего дня.
У меня в настоящее время есть набор данных для прибытия через каждые 10 секунд, который делает для простого преобразования в запросе:
SELECT Sum((Value/6) FROM History WHERE DataDate BETWEEN @startDate and @endDate
Где @startDate и @endDate являются сегодняшней датой в 0:00:00 и 11:59:59.
Прежде чем я установил данные, которые будут собираться каждые 10 секунд, они были собраны каждый раз, когда измененное Значение. Нет никаких дублирующихся записей с точки зрения времени, минимальная разница во времени составляет 1 секунду.
Как я могу настроить запрос для получения прошедшего времени между строками для случая, когда я не знаю временной интервал между чтениями?
Я использую SQL Server 2005.
WITH rows AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY DataDate) AS rn
FROM mytable
)
SELECT DATEDIFF(second, mc.DataDate, mp.DataDate)
FROM rows mc
JOIN rows mp
ON mc.rn = mp.rn - 1
В SQL Server 2012 +:
SELECT DATEDIFF(second, pDataDate, dataDate)
FROM (
SELECT *,
LAG(dataDate) OVER (ORDER BY dataDate) pDataDate
FROM rows
) q
WHERE pDataDate IS NOT NULL