sql >> データベース >  >> RDS >> Sqlserver

SQL Server の日付とルールに基づいてレコードのサブセットを特定する

    LAG() を使用できます および LEAD() 分析関数:

    SELECT * FROM (
        SELECT t.*,
               LAG(t.linked,1,0) OVER(ORDER BY t.FromDate DESC) as rnk_1, --Next one
               LEAD(t.linked,1,0) OVER(ORDER BY t.FromDate DESC) as rnk_2, -- Last one,
               LEAD(t.linked,2,0) OVER(ORDER BY t.FromDate DESC) as rnk_3 -- Last two,
        FROM YourTable t) s
    WHERE ((s.rnk_1 = 1 OR s.rnk_2 = 1) AND s.linked = 1) OR 
          (s.rnk_2 = 1 and s.rnk_3 = 1 and s.linked = 0)
    ORDER BY s.FromDate DESC
    

    これにより、linked = 1 を持つレコードが生成されます 前/次のレコードも 1 です。



    1. Javaを使用してbyte[]をMySQLに挿入できません

    2. すべてのテーブルから行を選択する簡単な方法

    3. Oracle SQL Developer-エラー:FROMキーワードが予期された場所に見つかりません

    4. 日付の最大値を持つ3つの関連付けテーブルのフィールド値を取得するにはどうすればよいですか?