2012-03-01 38 views
-2

如何爲每個使用sql查詢的行設置標誌1,2和3?通過訂購日期字段des/asc使用查詢的標誌設置

您的幫助是非常感謝。

對於如:

 

    Id  Name  date  flag 
    9278 david  02/12/2012 1 
    4343 sharon  21/11/2012 2 
    4783 elizabeth 17/11/2012 3 
    47846 john  08/10/2012 1 
    78347 chris  17/09/2012 2 
    37379 Joe   18/06/2012 3 

+0

你如何確定需要1,2或3? – 2012-03-01 17:10:29

+0

這個問題沒有意義,因爲您無法按照您在示例中描述的方式對這些記錄進行排名。請提供一個正確的示例,以便我們可以嘗試幫助您。 – 2012-03-01 17:14:05

回答

0

我以爲這是SQL2008:

select *, ROW_NUMBER() OVER (ORDER BY date) as Flag from YourTable 
+0

好的,現在你已經改變了這個問題,所以答案不再有效。 – Tomek 2012-03-01 17:09:38

+0

@Oded重新格式化了這個問題,但內容並沒有改變(儘管現在至少可讀......)無論如何,我認爲這不會起作用。 – 2012-03-01 17:11:24

+0

是的,這很難閱讀,並通過檢查我錯誤地認爲他需要連續序列的前三個記錄。 – Tomek 2012-03-01 17:33:26

1

你的問題是有點不清楚,但你可能需要使用ROW_NUMBER函數和模運算符的組合:

with temp as 
(
    select 9278 as num, 'david' as name,  CONVERT(datetime, '02/12/12',3) as date 
    UNION 
    select 4343, 'sharon',  CONVERT(datetime, '21/11/12',3) 
    UNION 
    select 4783, 'elizabeth', CONVERT(datetime, '17/11/12',3) 
    UNION 
    select 47846, 'john',  CONVERT(datetime, '08/10/12',3) 
    UNION 
    select 78347, 'chris' ,  CONVERT(datetime, '17/09/12',3) 
    UNION 
    select 37379, 'Joe' ,  CONVERT(datetime, '18/06/12',3) 
) 

select *, 
     ((ROW_NUMBER() OVER (ORDER BY date desc) + 2) % 3) + 1 as Flag 
from temp 

如果這些數據正在被一些編程語言所消耗,我可能會嘗試在那裏添加數字而不是在SQL代碼中。

+0

+1漂亮的把戲,順序轉換爲1基礎。 – Tomek 2012-03-01 17:37:47