sql >> Databáze >  >> RDS >> Sqlserver

Tisk aktuální hodnoty a předchozí hodnoty mezi rozsahem dat

Něco jako následující by mělo fungovat:

SELECT ID, Date, Time, Status
 from (select ID, Date, Time, Status, row_number() over (order by Date) Ranking
        from MyTable
        where ID = @SearchId
         and Date <= @SearchDate) xx
 where Ranking < 3
 order by Date, Time

Tím se vrátí maximálně dva řádky. Není jasné, zda používáte sloupce s datovým typem Datum a čas, nebo zda ve skutečnosti používáte vyhrazená slova jako názvy sloupců, takže si s tím budete muset lámat hlavu. (Vynechal jsem čas, ale můžete jej snadno přidat k různým řazením a filtrování.)

Vzhledem k revidovaným kritériím je to trochu složitější, protože zahrnutí nebo vyloučení řádku závisí na hodnotě vrácené v jiném řádku. Zde je „druhý“ řádek, pokud existují dva nebo více řádků, zahrnut pouze v případě, že „první“ řádek odpovídá konkrétní hodnotě. Standardním způsobem, jak toho dosáhnout, je dotazovat se na data, abyste získali maximální hodnotu, a poté se na ně dotazovat znovu a odkazovat na výsledek první sady.

S row_number však můžete dělat spoustu špinavých věcí. Pracujte na tomto:

SELECT ID, Date, Time, Status
 from (select
          ID, Date, Time, Status
         ,row_number() over (partition by case when Date = @SearchDate then 0 else 1 end
                             order by     case when Date = @SearchDate then 0 else 1 end
                                         ,Date) Ranking
        from MyTable
        where ID = @SearchId
         and Date <= @SearchDate) xx
 where Ranking = 1
 order by Date, Time

Budete muset vyřešit problém s datem a časem, protože to funguje pouze proti datům.



  1. MySQL:Je možné spojit výsledky GROUP-BY'd do dvou SELECTů?

  2. Je v mém dotazu na spojení tabulky nějaký špatný kód?

  3. PHP:Pokud záznam existuje, zobrazí HTML, jinak nezobrazí nic

  4. Vyberte pouze rok z MySql