Мне нужно отобразить список дат, который у меня есть в таблице
SELECT mydate AS MyDate, 1 AS DateType
FROM myTable
WHERE myTable.fkId = @MyFkId;
1 января 2010 г. - 1
2 января 2010 г. - 1
10 января 2010 г. - 1
Нет проблем. Однако теперь мне нужно отобразить дату до и дату после с другим типом DateType.
31 декабря 2009 г. - 2
1 января 2010 г. - 1
2 января 2010 г. - 1
3 января 2010 г. - 2
9 января 2010 г. - 2
10 января 2010 г. - 1
11 января 2010 г. - 2
Я думал, что смогу использовать союз
SELECT MyDate, 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
SELECT mydate AS MyDate, 1 AS DateType
FROM myTable
WHERE myTable.fkId = @MyFkId;
) AS myCombinedDateTable
Сюда, однако, входят дубликаты оригинальных дат.
31 декабря 2009 г. - 2
1 января 2010 г. - 2
1 января 2010 г. - 1
2 января 2010 г. - 2
2 января 2010 г. - 1
3 января 2010 г. - 2
9 января 2010 г. - 2
10 января 2010 г. - 1
11 января 2010 г. - 2
Как мне лучше всего удалить эти дубликаты? Я рассматриваю временную таблицу, но не уверен, что это лучший способ сделать это.
Мне также кажется, что это может привести к проблемам с производительностью, поскольку я выполняю один и тот же запрос три раза подряд.
Как лучше всего обработать этот запрос?