Я хочу написать запрос, который дает coloumn of DATES за последние 14 дней , начиная со вчерашнего дня.Получите таблицу дат за последние 14 дней (2 недели), начиная с предыдущего дня
Пример:
Dates
2012-06-21
2012-06-20
2012-06-19
--
-
Я хочу написать запрос, который дает coloumn of DATES за последние 14 дней , начиная со вчерашнего дня.Получите таблицу дат за последние 14 дней (2 недели), начиная с предыдущего дня
Пример:
Dates
2012-06-21
2012-06-20
2012-06-19
--
-
;WITH n(n) AS
(
SELECT TOP (14) ROW_NUMBER() OVER (ORDER BY [object_id])
FROM sys.objects ORDER BY [object_id]
)
SELECT Dates = DATEADD(DAY, -n, DATEDIFF(DAY, 0, GETDATE())) FROM n
ORDER BY n;
Прохладный ответ: не могли бы вы избавиться от 'ORDER BY [object_id]' в 1-м запросе и 'ORDER BY n' во втором запросе? – EkoostikMartin
Применение только 'ROW_NUMBER()' не обязательно означает, что вы получите 1-14 в качестве результата. Вы можете заметить, что большую часть времени, но это не гарантировано. Это 'ORDER BY' для' TOP', а не для результата. Окончательный 'ORDER BY' мог также быть« ORDER BY Dates DESC »- он имеет мало общего с числом в CTE. –
(Например, измените мой второй 'ORDER BY' на' ORDER BY NEWID() '.) –
Другой способ;
;with days(day) as
(
select getdate() - 1 as day
union all
select day - 1
from days
where day > dateadd(day, -14, getdate())
)
select cast(day as date) from days
Незначительный каламбур, ОП попросил, чтобы набор результатов начал со вчерашнего дня. – EkoostikMartin
Ах да, исправлено с - 1 –
Вы должны разграничить ключевые слова, такие как 'day' IMHO. Также сравните планы и СТАТИСТИЧЕСКОЕ ВРЕМЯ. Вы можете быть удивлены тем, что запрос, который действительно касается объектов, имеет меньшую продолжительность, меньшее количество чтений и точные оценки. –
@EkoostikMartin Я попытался это путем извлечения из моей предыдущей таблицы, но это занимает много времени, выберите Distinct обращенным (NVARCHAR (10), TimeLog, 120), даты из LogData порядка по обращенному (NVARCHAR (10), TimeLog, 120) DESC; – Rish