私はWin7マシンでMSSMS 2008 R2を使用しています。パス/フェイルフィールドに基づいて行間の中間日時値を削除して、各サブグループの最初と最後の合否を取得する方法。
各行は、パス/フェイルイベントを表します。私はいくつかの基本的なクエリの後に引っ張られ、このデータのテーブルを持っています。合格= TPSDおよび失敗= TFLT;私はの間にデルタを取得しようとしています。の初期TFLTと最新のTPSD(TFLT後の最初のTPSD)です。私の最初のアプローチは、データが連続して注文したときに正常に動作され、このことROW_NUMBER()関数を使用して、各行のエントリを列挙しました:
WITH ROWS AS
(
SELECT *, ROW_NUMBER() OVER (Order BY T.Location, T.BIT_TIME) AS RN
FROM #TEMP1 T
)
SELECT DATEDIFF(SECOND, R1.BIT_TIME, R2.BIT_TIME)
FROM ROWS R1
JOIN ROWS R2
on R1.RN = R2.RN - 1
AND R1.EventId = 'TFLT'
AND R2.EventId = 'TPSD'
AND R1.Location = R2.Location
をしかし、私は思ったように、データセットが構成されていなかった実現した後、私は壁にぶつかります。どんな助けもありがとう。前もって感謝します。
これはテーブルのサンプルで、複数の場所/ログIDがあり、大部分は連続してTFLT、TPSD、TFLT、TPSDなどのように構成されています。
- Stelio K
に(T.Location、T.BIT_TIME BY注文)OVER ROW_NUMBER()を変更してみてくださいROW_NUMBER()OVER(T.Location Order BY T.BIT_TIMEによるパーティション) – Kostya
選択したDATEDIFF(SECOND、R1.BIT_TIME、R2.BIT_TIME) select *、ROW_NUMBER()OVER(T.Location Order BY T .BIT_TIME asc)AS RN)x join(select *、ROW_NUMBER()OVER(T.Location Order by BY T.BIT_ X.RN = y.RN およびx.Location = y.Location およびy.EventId = 'TFLT' 上のx.EventId = 'TPSD'およびx.RN = 1 – Kostya
上の あなたがしようとしているものをSQLのフィドルにすることができれば、それはクールです。他の人が遊ぶのが楽になります。 http://sqlfiddle.com/ – Shiroy