SQL-запрос для получения DateDiff последних двух записей

У меня есть таблица с именем Event с eventNum в качестве первичного ключа и дата как datetime2 (7) в SQL Server 2008 R2. Я пытаюсь получить дату последних двух строк в таблице и получить разницу в минутах. Это то, что у меня есть на данный момент:

Select DATEDIFF(MI, e.date,(Select e2.date from Event e2 where eventNum = (Select MAX(e2.eventNum))))
    From Event e
    Where eventNum = (Select MAX(e.eventNum)-1 from e)

и я получаю эту ошибку:

Недопустимое имя столбца «Выбрать номер события из события, где число события = выбрать MAX (номер события) из события».

Я менял это 100 раз и не могу заставить его работать. Любая помощь?


person cs_erik    schedule 01.11.2012    source источник


Ответы (2)



Это не должно проходить через таблицу дважды, как ответ Тима.

select datediff(mi, min(x.date), max(x.date))
from (
    select top(2) *
    from Event e
    order by eventNum desc
) x

введите здесь описание изображения

Предполагая, что у вас всегда есть 2 записи или более, а время монотонно увеличивается, тогда вышеописанное работает.

  • Если у него есть только одна запись, он возвращает 0 (поскольку max=min=единственная запись).
  • Если ваше время не увеличивается монотонно, есть простая настройка этого запроса

e.g.

select top(1) datediff(mi, x.date, y.date)
from event x
join event y on y.eventnum < x.eventnum
order by x.eventnum desc, y.eventnum desc
person RichardTheKiwi    schedule 01.11.2012
comment
Хорошо, но date может быть не в том же порядке, что и eventNum. Если знак разницы дат имеет значение, это неверно. Если это не так, это правильно. - person ypercubeᵀᴹ; 02.11.2012
comment
Я не уверен, является ли миллисекунда более или менее ключевым фактором для этого вопроса, когда OP просто хочет одно значение, тем более, что столбец порядка является столбцом первичного ключа. - person Tim Schmelter; 02.11.2012