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

SQL para obter lista de datas e dias antes e depois sem duplicatas


Isso deve funcionar para você:
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:alterei o segundo UNION para um UNION ALL para melhor desempenho; a última subconsulta nunca terá duplicatas com as duas primeiras subconsultas, pois DateType é sempre 2 para os dois primeiros e 1 para o último UNION consulta ed.