Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL per ottenere l'elenco delle date e dei giorni prima e dopo senza duplicati

Questo dovrebbe funzionare per te:

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:ho cambiato il secondo UNION a un UNION ALL per prestazioni migliori; l'ultima sottoquery non avrà mai duplicati con le prime due sottoquery, poiché DateType è sempre 2 per i primi due e 1 per l'ultimo UNION ed interrogazione.