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

SQL para obtener una lista de fechas y días anteriores y posteriores sin duplicados

Esto debería funcionar para usted:

SELECT MyDate, min(DateType) as DateType
FROM (
    SELECT mydate - 1 AS MyDate, 2 AS DateType
    FROM myTable
    WHERE myTable.fkId = @MyFkId;

    UNION

    SELECT mydate + 1 AS MyDate, 2 AS DateType
    FROM myTable
    WHERE myTable.fkId = @MyFkId;

    UNION ALL

    SELECT mydate AS MyDate, 1 AS DateType
    FROM myTable
    WHERE myTable.fkId = @MyFkId;
) AS myCombinedDateTable
group by MyDate

Nota:cambié el segundo UNION a un UNION ALL para un mejor desempeño; la última subconsulta nunca tendrá duplicados con las dos primeras subconsultas, ya que DateType siempre es 2 para los dos primeros y 1 para el último UNION consulta ed.