TSQL для нумерации упорядоченного набора - PullRequest
4 голосов
/ 10 октября 2011

Как мне нумеровать упорядоченный набор (упорядоченный по значению даты и времени) с инкрементными значениями от 1 до 4, используя T-SQL? Я бы хотел, чтобы результаты выглядели следующим образом. Заранее спасибо.

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 ]

3 голосов
/ 10 октября 2011

Вот один из способов:

SELECT MyDate, ((row_number() over (order by MyDate) - 1) % 4) + 1
FROM MyTable
1 голос
/ 10 октября 2011

Я предполагаю, что у вас уже есть набор дат в SomeTable.dt:

SELECT dt, (ROW_NUMBER() OVER (ORDER BY dt) - 1)  % 4 + 1 AS col2
FROM SomeTable
ORDER BY dt
0 голосов
/ 11 октября 2011

Вот еще один вариант без 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
0 голосов
/ 10 октября 2011

Попробуйте это:

SELECT date, ((ROW_NUMBER() OVER (ORDER BY date) - 1) % 4) + 1 
FROM table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...