sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server ORDER BY date y nulls last

smalldatetime tiene un rango hasta el 6 de junio de 2079 para que pueda usar

ORDER BY ISNULL(Next_Contact_Date, '2079-06-05T23:59:00')

Si no hay registros legítimos tendrá esa fecha.

Si esto no es una suposición, le gustaría confiar en una opción más robusta que es ordenar en dos columnas.

ORDER BY CASE WHEN Next_Contact_Date IS NULL THEN 1 ELSE 0 END, Next_Contact_Date

Sin embargo, las dos sugerencias anteriores no pueden usar un índice para evitar una ordenación y brindar planes de aspecto similar.

Otra posibilidad, si existe tal índice, es

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