2013-11-25 89 views
1

這是一個開放式的「我應該如何最好地解決這個問題」的問題。我有一個表(dbo.session_dates),它將接收日期(沒有時間戳),並且每個日期都是唯一的。沒有特定的順序來輸入這些日期。可能會插入2013-11-25,然後是2011-06-07,然後是2012-03-22等 - 但最終它會連續保留大多數週日期,可能會在這裏或那裏丟失日期。所以你可以畫出一張大致連續的日期表,不包括週末日期,也許在這裏和那裏錯過了幾個日期。TSQL日期和數字

我希望最終能夠及時選擇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; 

這給我所有在臨時表中的日期,從中我可以選擇我想要的會話數量。

但我敢肯定有一個更好的解決方案...任何想法,將不勝感激

回答

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

我知道這將涉及一個WITH語句...仍然使用這些新的。謝謝一堆 – user2059532