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

特定の列の値が2回表示されるまで、一番上の行を選択します

    手順:

    1. 行番号を作成します、rnidの場合はすべての行に 順番に並んでいません。
    2. 行番号を作成します。approv_rnEmailApprovedで分割 したがって、EmailApproved = 1の場合がわかります 二度目
    3. outer applyを使用する secondの行番号を検索します EmailApproved = 1のインスタンス
    4. where 句は、行番号が>=であるすべての行を除外します 手順3で見つかった値。
    5. 1または0の場合EmailApproved 利用可能なレコードの場合、outer apply nullを返します。この場合、使用可能なすべての行を返します。
    with test as
    (
        select  *, 
                rn         = row_number() over (order by Created desc),
                approv_rn  = row_number() over (partition by EmailApproved 
                                                    order by Created desc)
        from    @Test
    )
    select  *
    from    test t
            outer apply
            (
                select  x.rn
                from    test x
                where   x.EmailApproved = 1
                and     x.approv_rn     = 2
            ) x
    where   t.rn    < x.rn or x.rn is null
    order by t.Created desc;
    



    1. コマンドプロンプトからMySQLを実行できません

    2. プリズマとpostgresを使用した行レベルのセキュリティ

    3. PHPExcel:無効なセル座標エラー

    4. プリペアドステートメントでレコードを更新し、更新が機能したかどうかを確認します