sql >> Databasteknik >  >> RDS >> Sqlserver

Välj översta raderna tills värdet i den specifika kolumnen har visats två gånger

Steg:

  1. Skapa ett radnummer, rn , över alla rader i fallet id är inte i sekvens.
  2. Skapa ett radnummer, approv_rn , partitionerad av EmailApproved så vi vet när EmailApproved = 1 för andra gången
  3. Använd en outer apply för att hitta radnumret för second instans av EmailApproved = 1
  4. I where klausul filtrera bort alla rader där radnumret är >= värdet i steg 3.
  5. Om det finns 1 eller 0 EmailApproved poster tillgängliga sedan den outer apply returnerar null, i så fall returnerar alla tillgängliga rader.
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 - Hur söker man efter 26 poster som var och en börjar med bokstaven i alfabetet?

  2. Konvertera datumformat till DD/MMM/ÅÅÅÅ-format i SQL Server

  3. Ogiltig JSON-text i argument 2 - json_contains i MySQL 5.7.8

  4. tidszonsberoende systimestamp och tidsstämpel jämförelse på Oracle