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