2012-06-22 1 views
1

Я хочу написать запрос, который дает coloumn of DATES за последние 14 дней , начиная со вчерашнего дня.Получите таблицу дат за последние 14 дней (2 недели), начиная с предыдущего дня

Пример:

Dates 

2012-06-21 
2012-06-20 
2012-06-19 
-- 
- 
+0

@EkoostikMartin Я попытался это путем извлечения из моей предыдущей таблицы, но это занимает много времени, выберите Distinct обращенным (NVARCHAR (10), TimeLog, 120), даты из LogData порядка по обращенному (NVARCHAR (10), TimeLog, 120) DESC; – Rish

ответ

4
;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; 
+0

Прохладный ответ: не могли бы вы избавиться от 'ORDER BY [object_id]' в 1-м запросе и 'ORDER BY n' во втором запросе? – EkoostikMartin

+0

Применение только 'ROW_NUMBER()' не обязательно означает, что вы получите 1-14 в качестве результата. Вы можете заметить, что большую часть времени, но это не гарантировано. Это 'ORDER BY' для' TOP', а не для результата. Окончательный 'ORDER BY' мог также быть« ORDER BY Dates DESC »- он имеет мало общего с числом в CTE. –

+0

(Например, измените мой второй 'ORDER BY' на' ORDER BY NEWID() '.) –

0

Другой способ;

;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 
+0

Незначительный каламбур, ОП попросил, чтобы набор результатов начал со вчерашнего дня. – EkoostikMartin

+0

Ах да, исправлено с - 1 –

+0

Вы должны разграничить ключевые слова, такие как 'day' IMHO. Также сравните планы и СТАТИСТИЧЕСКОЕ ВРЕМЯ. Вы можете быть удивлены тем, что запрос, который действительно касается объектов, имеет меньшую продолжительность, меньшее количество чтений и точные оценки. –

Смежные вопросы