Даты и числа TSQL

Это открытый вопрос «как мне лучше всего это осуществить». У меня есть таблица (dbo.session_dates), которая будет получать даты (без отметок времени) и где каждая дата будет уникальной. Нет определенного порядка, в котором будут вводиться эти даты. 2013-11-25 может быть вставлено, затем 2011-06-07, 2012-03-22 и т. д., но в конечном итоге он будет содержать большинство будних дней подряд, возможно, пропустив дату здесь или там. Таким образом, вы можете представить себе таблицу с примерно последовательными датами, не включая даты выходных и, возможно, пропуская несколько дат здесь и там.

Я хочу иметь возможность, в конце концов, выбрать X «сеансов» во времени, например. «показать мне последние 20 сеансов», которые могут длиться более 200 дней, 100 дней или 20 дней (или обычно от 25 до 30 дней, исключая выходные), в зависимости от того, как были введены даты.

Я поиграл с функцией Row_number и думаю, что могу сделать это с временной таблицей (код ниже), но, похоже, я все еще выбираю всю таблицу session_dates во временную таблицу.:

IF OBJECT_ID('tempdb..#NumsAndDates') IS NOT NULL DROP TABLE #NumsAndDates

IF OBJECT_ID('tempdb..#NumsAndDates') IS NULL  
CREATE TABLE #NumsAndDates(session_num int,session_date date);

insert into #NumsAndDates
select 
  ROW_NUMBER() over (order by session_date desc),
  session_date 
from  dbo.session_dates 
order by 2 desc; 

select * from #NumsAndDates
where  session_num <= 5
order by session_num asc;

Это дает мне ВСЕ даты во временной таблице, из которой я могу выбрать нужное количество сеансов.

Но я уверен, что есть более элегантное решение... любые идеи будут оценены


person user2059532    schedule 25.11.2013    source источник


Ответы (1)


Для этого вам совершенно не нужна таблица #temp.

;WITH x AS 
(
  SELECT session_date, rn = ROW_NUMBER() OVER (ORDER BY session_date DESC)
  FROM dbo.session_date
)
SELECT session_date FROM x
WHERE rn <= 5
ORDER BY rn;
person Aaron Bertrand    schedule 25.11.2013
comment
Я знал, что это будет включать оператор WITH ... все еще новичок в их использовании. Огромное спасибо - person user2059532; 26.11.2013