TSQL编号有序集

时间:2011-10-10 03:59:41

标签: tsql

如何使用T-SQL对增量值1到4的有序集(按日期时间值排序)进行编号?我希望结果如下所示。提前谢谢。

1/1/2011    1
1/2/2011    2
1/3/2011    3
1/4/2011    4
1/5/2011    1
1/6/2011    2
1/7/2011    3
1/8/2011    4
1/9/2011    1
1/10/2011   2
1/11/2011   3
1/12/2011   4
1/13/2011   1
1/14/2011   2
1/15/2011   3
1/16/2011   4
1/17/2011   1
1/18/2011   2
1/19/2011   3
1/20/2011   4

4 个答案:

答案 0 :(得分:3)

这是一种方式:

SELECT MyDate, ((row_number() over (order by MyDate) - 1) % 4) + 1
FROM MyTable

答案 1 :(得分:1)

我假设你已经在SomeTable.dt中设置了一组日期:

SELECT dt, (ROW_NUMBER() OVER (ORDER BY dt) - 1)  % 4 + 1 AS col2
FROM SomeTable
ORDER BY dt

答案 2 :(得分:0)

试试这个:

SELECT date, ((ROW_NUMBER() OVER (ORDER BY date) - 1) % 4) + 1 
FROM table

答案 3 :(得分:0)

这是没有row_number的另一个选项(也适用于SQL2k):

SELECT 
    D.DateValue, 
    (DATEPART(DD, D.DateValue) - 1) % 4 + 1 AS Col1,
    DATEDIFF(DD, '20110101', D.DateValue) % 4 + 1 AS Col2
FROM D 

此处Col1将在每个新月开始计算,而Col2将在所有月份编号记录。即,如果您选择了一个月以上,您将在月份的边界检索:

DateValue   Col1 Col2
2011-01-29  1    1
2011-01-30  2    2
2011-01-31  3    3
2011-02-01  1    4
2011-02-02  2    1