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

Откуда: ☭
Сообщений: 72991
Периоды хранятся в двух полях, Year smallint и Month smallint, нужно найти максимальный.
select max(year), max(month) вернет максимальный год и месяц по отдельности, соответственно чтобы получить именно период, нужно сделать первое число соответствующего месяца и получить максимальную дату.

Пока что слепляю из чисел строку и конвертирую в дату, нет ли способа пооптимальнее?
21 апр 14, 13:31    [15910532]     Ответить | Цитировать Сообщить модератору
 Re: Как наиболее быстро выбрать максимальный период?  [new]
Glory
Member

Откуда:
Сообщений: 104751
selet top 1 * from mytable order by year desc, month desc
21 апр 14, 13:32    [15910542]     Ответить | Цитировать Сообщить модератору
 Re: Как наиболее быстро выбрать максимальный период?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
select top 1 * from ...
order by Year desc, Month desc
21 апр 14, 13:33    [15910548]     Ответить | Цитировать Сообщить модератору
 Re: Как наиболее быстро выбрать максимальный период?  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
Хм, да.

Забыл дописать, это нужно сделать с группировкой по еще одному полю, скажем ID.
21 апр 14, 13:36    [15910563]     Ответить | Цитировать Сообщить модератору
 Re: Как наиболее быстро выбрать максимальный период?  [new]
Кавказ-сила
Member

Откуда: Москва
Сообщений: 261
select top 1 with ties * from ...
order by row_number() over(partition by ID order by Year desc, Month desc)
21 апр 14, 13:39    [15910597]     Ответить | Цитировать Сообщить модератору
 Re: Как наиболее быстро выбрать максимальный период?  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
Кавказ-сила,

Понял, попробую.
21 апр 14, 13:42    [15910620]     Ответить | Цитировать Сообщить модератору
 Re: Как наиболее быстро выбрать максимальный период?  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
Кавказ-сила,

А как теперь добавить к такому запросу условие, например, "ранее января 2014 года"?
29 апр 14, 14:43    [15952427]     Ответить | Цитировать Сообщить модератору
 Re: Как наиболее быстро выбрать максимальный период?  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
Antonariy,

Кавказ-сила
select top 1 with ties * from ...
WHERE "ранее января 2014 года"
order by row_number() over(partition by ID order by Year desc, Month desc)
29 апр 14, 14:45    [15952451]     Ответить | Цитировать Сообщить модератору
 Re: Как наиболее быстро выбрать максимальный период?  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
HandKot
Antonariy,

Кавказ-сила
select top 1 with ties * from ...
WHERE "ранее января 2014 года"
order by row_number() over(partition by ID order by Year desc, Month desc)
Я имею ввиду, что можно написать Year <= 2014, но нельзя Month <= 1, так только январи выберутся. Сейчас я опять леплю дату из Month+Year и сравниваю ее с другой датой, которую тоже леплю из @Month+@Year. Хотелось бы надеяться, что есть вариант без этой лепки.
29 апр 14, 14:51    [15952509]     Ответить | Цитировать Сообщить модератору
 Re: Как наиболее быстро выбрать максимальный период?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Antonariy
HandKot
Antonariy,

пропущено...
Я имею ввиду, что можно написать Year <= 2014, но нельзя Month <= 1, так только январи выберутся. Сейчас я опять леплю дату из Month+Year и сравниваю ее с другой датой, которую тоже леплю из @Month+@Year. Хотелось бы надеяться, что есть вариант без этой лепки.
Year<2014 OR Year=2014 AND Month<=1
29 апр 14, 14:52    [15952526]     Ответить | Цитировать Сообщить модератору
 Re: Как наиболее быстро выбрать максимальный период?  [new]
guest123456
Guest
Antonariy,

year * 100 + month < 201401
29 апр 14, 14:53    [15952535]     Ответить | Цитировать Сообщить модератору
 Re: Как наиболее быстро выбрать максимальный период?  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
iap
Antonariy
пропущено...
Я имею ввиду, что можно написать Year <= 2014, но нельзя Month <= 1, так только январи выберутся. Сейчас я опять леплю дату из Month+Year и сравниваю ее с другой датой, которую тоже леплю из @Month+@Year. Хотелось бы надеяться, что есть вариант без этой лепки.
Year<2014 OR Year=2014 AND Month<=1
Вот ведь склеротик я, сам же когда-то так делал.
Спасибо.
29 апр 14, 14:57    [15952569]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить