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

Jediný dotaz SQL, který dokáže zpracovat jak nulové, tak hodnotné časové období na serveru SQL

WITH    limits AS
        (
        SELECT  COALESCE(@startDate, MIN(mydate)) AS startDate, COALESCE(@endDate, MAX(mydate)) AS endDate
        FROM    mytable
        )
SELECT  m.*
FROM    limits
JOIN    mytable m
ON      mydate BETWEEN startDate AND endDate

To bude nejúčinnější, pokud je na mydate index , protože tato podmínka je proměnlivá a bude používat Index Seek .

Pokud neexistuje žádný index, použijte IFNULL konstrukce navržené ostatními.



  1. Získejte maximální hodnotu a odpovídající sloupec

  2. Dotaz LISTAGG ORA-00937:není skupinová funkce jedné skupiny

  3. Proč Hibernate vyvolá výjimku org.hibernate.exception.LockAcquisitionException?

  4. Jak mohu vygenerovat SQL dotaz pomocí SQL::Abstract?