2012-06-22 97 views
1

我有一個查詢從一個表中有最後六個月的數據,它有一個列UseDates(截至今天六月,這個表的日期爲2011年12月到2012年5月)。訪問SQL中的日期排名?

我希望包含一個「級別」列,它將1與所有12月日期相關聯,2與所有1月日期相關,等等 - 在一個月前相應日期最多6。如果我從一個月後開始查詢這個查詢,那麼1將與1月等相關聯。

我希望這是有道理的!

例如,如果我現在運行查詢

UseDate  Rank 
12/31/2011  1 
1/12/2012  2 
... 
5/23/2012  6 

例如,如果我跑在八月查詢:

UseDate  Rank 
2/16/2012  1 
3/17/2012  2 
... 
7/21/2012  6 

例如,如果我跑在三月查詢:

UseDate  Rank 
9/16/2011  1 
10/17/2011  2 
... 
2/24/2012  6 

回答

0
SELECT 
    UseDates, 
    DateDiff("m", Date(), UseDates) + 7 AS [Rank] 
FROM YourTable; 
+0

我加了一些澄清例子 – MyNameIsKhan

+0

是有辦法讓它變成動態的,所以我不需要將日期強加給它。我以後可能會忘記它 – MyNameIsKhan

+0

糟糕。硬編碼的日期從我的測試中結轉。嘗試版本,因爲我剛剛糾正。對於那個很抱歉。 – HansUp

0

您可以使用month function代替UseDates並從結果中減去o f now函數。如果它變爲負數,只需加上12.也可以加1,因爲你從1開始而不是0.顯然,它應該適用於半年的日期範圍。當你需要「排名」好幾年時,你會遇到麻煩。

+0

我不知道這工作 - 但我增加了一些澄清的例子,如果這有助於 – MyNameIsKhan

0

您可以按位數進行計數。

SELECT 
    Table.ADate, 
    (SELECT Count(ADate) 
    FROM Table b 
    WHERE b.ADate<=Table.ADate) AS Expr1 
FROM Table3; 

你必須重複子查詢的任何地方聲明:

SELECT 
    Table.ADate, 
    (SELECT Count(ADate) 
    FROM Table b 
    WHERE b.ADate<=Table.ADate And Adate>#2012/02/01#) AS Expr1 
FROM Table3 
WHERE Adate>#2012/02/01#