私はこのようなデータに何かがありますキャプチャ最初の文字:複数のID
ID 1 1 1 1 1 1 1 1 1 1 1 1
Month J F M A M J J A S O N D
Status 1 0 0 1 0 1 0 0 1 1 1 1
ID 2 2 2 2 2 2 2 2 2 2 2 2
Month J F M A M J J A S O N D
Status 1 0 1 0 1 0 1 0 1 0 1 1
ID 3 3 3 3 3 3 3 3 3 3 3 3
Month J F M A M J J A S O N D
Status 0 0 0 0 0 0 0 0 0 0 0 1
トン-SQLを使用して、私が最初に対応する月を捕獲しようとしていますこの例では9月、11月および12月のIDごとに1の最後のグループにSTATUS = 1
を追加します。ここで
は、私が使用しているコードです:
IF OBJECT_ID('tempdb..#Temp1') IS NOT NULL DROP TABLE #Temp1
;WITH PARTITIONED1 AS
(SELECT t0.ID
, t0.Year_Month
, LAST_VALUE(t0.Year_Month) OVER (PARTITION BY t0.Account_Number ORDER BY t0.Year_Month) AS STATUS
, ROW_NUMBER() OVER (PARTITION BY t0.Account_Number ORDER BY t0.Year_Month) AS rn1
FROM #Temp0 t0
)
SELECT *
INTO #Temp1
FROM PARTITIONED1 p1
ORDER BY t0.ID
, t0.Year_Month
IF OBJECT_ID('tempdb..#Temp') IS NOT NULL DROP TABLE #Temp
SELECT *
INTO #Temp
FROM #Temp1 t1
WHERE t1.rn1 = (SELECT MAX(b.rn1) + 1 FROM #Temp1 b WHERE b.STATUS = 0)
GROUP BY t1.ID
, t1.Year_Month
, t1.rn1
しかし、これはちょうどこの場合1月には、STATUS = 1
は1秒の最後のグループの最初の1として全体的に達成され、最後のインスタンスを返します。
私はCASEステートメントとさまざまな組み合わせでグルーピングを試みましたが(中間のステップでデータを#Temp1に読み込みます)、3つのIDすべての結果を取得できませんでした。誰でも助けることができますか?
ありがとうございます! 7月6月とのJlのためのチュを想定し
を...これは少し複雑すぎる – iamdave
@iamdaveです先頭の関数を利用するのは良いですが、SQL Serverの以前のバージョンを使用している場合はどうなりますか? 2008年に言いましょう –
@iamdave島と谷を特定する必要がないので簡素化 –