Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Спложная нумерация месяцев и годов в таблице Календарь  [new]
fury_fury
Member

Откуда:
Сообщений: 96
Добрый день
Уже битый час бьюсь над задачей - пронумеровать сплошной нумерацией строки таблицы Календарь в срезе месяцев и годов
Таблица содержит поля: Дата, год,месяц
Нужно добавить поле ранжирования
Напр
01-01-2012
01-01-2012
01-01-2012
01-01-2012
01-01-2012
11 ноя 15, 23:25    [18403321]     Ответить | Цитировать Сообщить модератору
 Re: Спложная нумерация месяцев и годов в таблице Календарь  [new]
Glory
Member

Откуда:
Сообщений: 104751
И с какой проблемой в столкнулись в течении этого битого часа ?
11 ноя 15, 23:27    [18403325]     Ответить | Цитировать Сообщить модератору
 Re: Спложная нумерация месяцев и годов в таблице Календарь  [new]
fury_fury
Member

Откуда:
Сообщений: 96
Glory,

так решал
CASE WHEN [month]!=LAG([month])OVER(ORDER BY [serial_date]) THEN SET @a =  @a+1 ELSE @a END as 'RANK'

но @a = @a+1 ожидаемо без цикла while не сработал
пробовал ранжировать
RANK()OVER(  ORDER BY [year],[month]) as 'Ранг'

но во втором месяце вместо 2 - 32
11 ноя 15, 23:33    [18403340]     Ответить | Цитировать Сообщить модератору
 Re: Спложная нумерация месяцев и годов в таблице Календарь  [new]
fury_fury
Member

Откуда:
Сообщений: 96
первый пост случайно отправил, не заполнив пример
Нужно вот так:
01-01-2012 - 1
02-01-2012 - 1
03-01-2012 - 1
...
01-02-2012 - 2
02-02-2012 - 2
..
01-01-2013 - 13
11 ноя 15, 23:36    [18403350]     Ответить | Цитировать Сообщить модератору
 Re: Спложная нумерация месяцев и годов в таблице Календарь  [new]
Glory
Member

Откуда:
Сообщений: 104751
fury_fury
но во втором месяце вместо 2 - 32

А вы про другие функции ранжирования не догадались прочитать ?
11 ноя 15, 23:37    [18403354]     Ответить | Цитировать Сообщить модератору
 Re: Спложная нумерация месяцев и годов в таблице Календарь  [new]
fury_fury
Member

Откуда:
Сообщений: 96
Glory,
DENSE_RANK.. вообще вылетело из головы. не сталкивался с ней лет 5

Спасибо за подсказку, Glory
11 ноя 15, 23:40    [18403366]     Ответить | Цитировать Сообщить модератору
 Re: Спложная нумерация месяцев и годов в таблице Календарь  [new]
Glory
Member

Откуда:
Сообщений: 104751
fury_fury
Glory,
DENSE_RANK.. вообще вылетело из головы. не сталкивался с ней лет 5

Спасибо за подсказку, Glory

Используйте эту подсказку каждый раз, как вам захочется создать новую тему
11 ноя 15, 23:41    [18403370]     Ответить | Цитировать Сообщить модератору
 Re: Спложная нумерация месяцев и годов в таблице Календарь  [new]
fury_fury
Member

Откуда:
Сообщений: 96
Glory, хорошо)
Но сомневаюсь что эта идея пришла бы мне в голову сейчас. Задачу нужно завершить к 9 завтра.
Прошу понять..

Спасибо еще раз
11 ноя 15, 23:56    [18403430]     Ответить | Цитировать Сообщить модератору
 Re: Спложная нумерация месяцев и годов в таблице Календарь  [new]
Glory
Member

Откуда:
Сообщений: 104751
fury_fury
Но сомневаюсь что эта идея пришла бы мне в голову сейчас. Задачу нужно завершить к 9 завтра.
Прошу понять..

Т.е. идея написать тему про "сложную" нумерацию в форуме пришла, а идея прочитать про функцию rank в хелпе не пришла ?
Не понимаю
12 ноя 15, 00:00    [18403452]     Ответить | Цитировать Сообщить модератору
 Re: Спложная нумерация месяцев и годов в таблице Календарь  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Вапроз топика: как быстро группировать таблицу календаря по месяцам/годам ?

Тогда сделайте доп. числовые поля мес/год. Заполните их и группируйте на здоровье. Это действительно удобные для запросов поля.

заполнить можно:
update ...
set
mon = month(mydate),
yea = year(mydate)

Или я не понял сабжевого воапроса ?
12 ноя 15, 10:48    [18404629]     Ответить | Цитировать Сообщить модератору
 Re: Спложная нумерация месяцев и годов в таблице Календарь  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
LSV
Вапроз топика: как быстро группировать таблицу календаря по месяцам/годам ?

Тогда сделайте доп. числовые поля мес/год. Заполните их и группируйте на здоровье. Это действительно удобные для запросов поля.

заполнить можно:
update ...
set
mon = month(mydate),
yea = year(mydate)

Или я не понял сабжевого воапроса ?
ИМХО не понял.
Однако, замечу, что делать постоянные поля с месяцами и годами не стоит.
Достаточно добавить вычисляемые поля. Их можно и проиндексировать.
12 ноя 15, 10:57    [18404682]     Ответить | Цитировать Сообщить модератору
 Re: Спложная нумерация месяцев и годов в таблице Календарь  [new]
o-o
Guest
LSV
...Или я не понял сабжевого воапроса ?

не понял, что уже все давно пронумеровали еще вчера. без всяких доп.полей
12 ноя 15, 11:08    [18404755]     Ответить | Цитировать Сообщить модератору
 Re: Спложная нумерация месяцев и годов в таблице Календарь  [new]
ГуЗы
Guest
Кстати.
если верить профайлеру, так:
select calendar_date, datepart(mm,Calendar_Date)+(datepart(yy,Calendar_Date)-2012)*12 from calendar
where calendar_date>='20120101'

чуть быстрее, чем так:
select calendar_date, DENSE_RANK() over(partition by datepart(yy,Calendar_Date) order by datepart(mm,Calendar_Date))
from calendar
where calendar_date>='20120101'
12 ноя 15, 11:30    [18404897]     Ответить | Цитировать Сообщить модератору
 Re: Спложная нумерация месяцев и годов в таблице Календарь  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
iap
Однако, замечу, что делать постоянные поля с месяцами и годами не стоит.
Достаточно добавить вычисляемые поля. Их можно и проиндексировать.
Экономия на спичках. Поле tinyint может работать быстрее соотв. вычисляемого, потому что вычислять нечего.
Табличка статичная. Записей в ней - мизер. Заполняется крайне редко или даже один раз.

Не думаю, что выч.поле чем то принципиально лучше в этом конкретном случае.

В случае миграции таблицы в др. систему (ну вдруг) вычисл.полей может вообще не быть. :)
12 ноя 15, 11:33    [18404910]     Ответить | Цитировать Сообщить модератору
 Re: Спложная нумерация месяцев и годов в таблице Календарь  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
LSV
iap
Однако, замечу, что делать постоянные поля с месяцами и годами не стоит.
Достаточно добавить вычисляемые поля. Их можно и проиндексировать.
Экономия на спичках. Поле tinyint может работать быстрее соотв. вычисляемого, потому что вычислять нечего.
Табличка статичная. Записей в ней - мизер. Заполняется крайне редко или даже один раз.
Если есть возможность сделать невычисляемое поле, то всегда лучше делать невычисляемое :-)
Меньше будет проблем.
12 ноя 15, 18:39    [18408265]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить