2011-10-10 83 views
4

如何使用T-SQL为增量值1至4编号有序集(按日期时间值排序)?我希望结果如下所示。提前致谢。TSQL对订购集编号

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

Off this topic to this question but [your question here](http://dba.stackexchange.com/questions/6724/drop-duplicateredundant-unique-constraint-from-filestream-table/9723#9723)被迁移并回答。 [dba.se] –

回答

2

这里有一种方法:

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

/我摇着他的拳头,稍微快点打字员,然后打+1; –

+0

哈,非常酷。 +1。 – jadarnel27

+0

@moot大声笑59秒! :) –

1

我假设你有一组日期已经SomeTable.dt

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

试试这个:

SELECT date, ((ROW_NUMBER() OVER (ORDER BY date) - 1) % 4) + 1 
FROM table 
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