SQL SERVER – Ранг / Число строк в месяцах

У меня есть запрос, который выводит следующее:

 RegDate Month countrycode партнер sk_skin AC GameWin
 1/1/2011 1/1/2011 DE 0 a 274 32458.2558
 1/1/2011 1/1/2011 UK 0 b 4 386,6925
 1/1/2011 1/1/2011 FI 1 a 320 12875.0189
 1/1/2011 1/1/2011 SK 1 b 85 5752.8503
 1/1/2011 1/1/2011 FI 0 a 520 65339.3142
 1/1/2011 1/1/2011 FI 1 a 295 29163.1045
 1/1/2011 2/1/2011 DE 0 a 79 16028.3849
 1/1/2011 3/1/2011 DE 0 b 4 525.252
 1/1/2011 3/1/2011 DE 1 a 36 7718.6327
 1/1/2011 3/1/2011 DE 1 b 24 5715.1279
 1/1/2011 01.04.2011 FI 0 a 196 27357.4072
 1/1/2011 4/1/2011 FI 1 a 146 20178.9315

Я хотел бы иметь номер строки в месяц, в этом случае 1/1/2011 будет 1, 2/1/2011 будет 2, 3/1/2011 будет 3, 4/1/2011 будет 4.

Этот запрос будет выполняться через цикл, чтобы месяц мог начаться в разных точках,

Я хотел бы получить следующий результат;

 RegDate Month countrycode партнер sk_skin AC GameWin Month
 1/1/2011 1/1/2011 DE 0 a 274 32458.2558 1
 1/1/2011 1/1/2011 UK 0 b 4 386,6925 1
 1/1/2011 1/1/2011 FI 1 a 320 12875.0189 1
 1/1/2011 1/1/2011 SK 1 b 85 5752.8503 1
 1/1/2011 1/1/2011 FI 0 a 520 65339.3142 1
 1/1/2011 1/1/2011 FI 1 a 295 29163.1045 1
 1/1/2011 2/1/2011 DE 0 a 79 16028.3849 2
 1/1/2011 3/1/2011 DE 0 b 4 525.252 3
 1/1/2011 3/1/2011 DE 1 a 36 7718.6327 3
 1/1/2011 3/1/2011 DE 1 b 24 5715.1279 3
 1/1/2011 01.04.2011 FI 0 a 196 27357.4072 4
 1/1/2011 4/1/2011 FI 1 a 146 20178.9315 4

Я попытался использовать следующее,

(RANK() OVER (ORDER BY DATEADD(m,DATEDIFF(m,0,date),0))-1) as rank 

Формат даты – дата (нет времени) с использованием

 DATEADD(m,DATEDIFF(m,0,datetime),0) 

Этот ранг дает мне случайный номер Ранга (с каким-то рисунком), однако, поскольку этот запрос будет добавлен в цикл и итератирован по числу сгенерированных чисел, 1 для самого низкого месяца, 2 для второго наименьшего ect …

Надеюсь, я правильно объяснил.

Измените свой рейтинг на DENSE_RANK на основе DATEPART

 DENSE_RANK() OVER ( ORDER BY DATEPART(m, MyDate) ) 

когда вам нужно проложить несколько лет, просто добавьте еще одну дату

 DENSE_RANK() OVER ( ORDER BY DATEPART(YYYY, MyDate), DATEPART(m, MyDate)) 

пример

 DECLARE @table TABLE ( MyDate DATE ) INSERT INTO @table VALUES ( '02/01/2012' ) , ( '02/01/2012' ) , ( '02/01/2012' ) , ( '03/01/2012' ) , ( '03/01/2012' ) , ( '03/01/2012' ) , ( '04/01/2012' ) SELECT * ,DENSE_RANK() OVER ( ORDER BY DATEPART(m, MyDate) ) FROM @table 

Результаты

 Month Rank 2012-02-01 1 2012-02-01 1 2012-02-01 1 2012-03-01 2 2012-03-01 2 2012-03-01 2 2012-04-01 3 

Используйте DENSE_RANK () вместо RANK (), это приведет к нужной нумерации.

  • Исключить нулевые значения с помощью DENSE_RANK
  • Как добавить столбец ранга?
  • Ранжирование строк таблицы серверов Sql при изменении значения столбца
  • Множественный столб в SQL Server
  • SQL Как заказать каждую запись по дате
  • Ранг SQL не работает должным образом
  • Ранжирование строк с использованием функции SQL Server Rank без пропусков номера ранга
  • Выбор SQL TOP N строк из группы, row_number, ранга не работает
  • Применить ранг с помощью RowNumber на основе нескольких условий
  • как получить ранг определенной строки в SQL?
  • Как включить только строки, в которых следующая строка находится в пределах 12 часов и ранжировать соответственно
  • Interesting Posts

    использование STDistance в SQL-сервере для поиска кратчайшего пути в графе

    Можно ли переместить таблицу __MigrationHistory System на новый сервер?

    Производительность SQL Query UNION

    Разница в количестве логических чтений для аналогичного набора данных

    Определение версии SQL Server с использованием JDBC

    Кластерный / некластеризованный индекс в столбце уникального идентификатора в SQL Server

    Есть ли способ многопоточности SqlDataReader?

    SQL Server долго работает запрос случайным таймаутом через .Net

    .net: Лучшая практика обработки исключений при использовании транзакций?

    Режим состояния сеанса asp.net «SQLServer»

    Отображение страницы на стороне сервера в Azure (MS SQL)

    Заполнение списка дат из нескольких диапазонов дат в SQL-сервере

    TSQL – соединение с использованием полнотекстовых контейнеров

    Лучший способ добавить конкатенированную строку из нескольких полей в хранимую процедуру

    Сравнение числовых строк в SQL Server

    Давайте будем гением компьютера.