Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL, um eine Liste mit Datumsangaben sowie Tagen davor und danach ohne Duplikate zu erhalten

Das sollte für Sie funktionieren:

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

Hinweis:Ich habe die zweite UNION geändert zu einem UNION ALL für bessere Leistung; Die letzte Unterabfrage wird niemals Duplikate mit den ersten beiden Unterabfragen haben, seit DateType ist immer 2 für die ersten beiden und 1 für die letzte UNION ed-Abfrage.