4

SQL Server 2008 R2 で、eventNum を主キーとし、日付を datetime2(7) とする Event というテーブルがあります。テーブルの最後の 2 行の日付を取得し、その差を分単位で取得しようとしています。これは私が現在持っているものです:

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)

そして、私はこのエラーを受け取ります:

無効な列名 'Select eventNum from Event Where eventNum = Select MAX(eventNum) from Event'.

これを100回変更しましたが、機能しません。何か助けはありますか?

4

2 に答える 2

6

あなたが使用することができますROW_NUMBER

WITH CTE AS 
(
   SELECT RN = ROW_NUMBER() OVER (ORDER BY eventNum DESC)
        , date
   FROM Event 
)
SELECT Minutes = DATEDIFF(minute, 
           (SELECT date FROM CTE WHERE RN = 2),
           (SELECT date FROM CTE WHERE RN = 1))

フィドル: http://www.sqlfiddle.com/#!3/3e9c8/17/0

于 2012-11-01T21:42:19.777 に答える
3

これは、Tim の回答のように 2 回テーブルを通過する必要はありません。

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

ここに画像の説明を入力

常に 2 つ以上のレコードがあり、時間が単調に増加していると仮定すると、上記は機能します。

  • レコードが 1 つしかない場合は、0 を返します (max=min=singular record であるため)。
  • 時間が単調に増加していない場合は、このクエリを簡単に調整できます

例えば

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
于 2012-11-01T22:06:42.393 に答える