Вычислите разницу во времени между двумя строками

У меня есть таблица, которая содержит следующее:

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.

46
задан John Saunders 24 February 2015 в 00:37
поделиться

1 ответ

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
135
ответ дан 26 November 2019 в 20:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: