Это открытый вопрос «как мне лучше всего это осуществить». У меня есть таблица (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;
Это дает мне ВСЕ даты во временной таблице, из которой я могу выбрать нужное количество сеансов.
Но я уверен, что есть более элегантное решение... любые идеи будут оценены