Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL pour obtenir la liste des dates ainsi que les jours avant et après sans doublons

Cela devrait fonctionner pour vous :

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

Remarque :j'ai changé le deuxième UNION à un UNION ALL pour de meilleures performances ; la dernière sous-requête n'aura jamais de doublons avec les deux premières sous-requêtes, puisque DateType vaut toujours 2 pour les deux premiers, et 1 pour le dernier UNION e requête.