Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server ORDER BY data e nulos por último


smalldatetime tem alcance até 6 de junho de 2079 para que você possa usar
ORDER BY ISNULL(Next_Contact_Date, '2079-06-05T23:59:00')

Se nenhum registro legítimo terá essa data.

Se isso não for uma suposição, você gosta de confiar em uma opção mais robusta, classificando em duas colunas.
ORDER BY CASE WHEN Next_Contact_Date IS NULL THEN 1 ELSE 0 END, Next_Contact_Date

Ambas as sugestões acima não são capazes de usar um índice para evitar uma classificação e fornecer planos de aparência semelhante.



Uma outra possibilidade se tal índice existir é
SELECT 1 AS Grp, Next_Contact_Date 
FROM T 
WHERE Next_Contact_Date IS NOT NULL
UNION ALL
SELECT 2 AS Grp, Next_Contact_Date 
FROM T 
WHERE Next_Contact_Date IS NULL
ORDER BY Grp, Next_Contact_Date