Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вторая максимальная дата  [new]
Вторая максимальная дата
Guest
Добрый день !
Кто подскажет как можно найти вторую максимальную дату ?
26 мар 17, 01:08    [20333047]     Ответить | Цитировать Сообщить модератору
 Re: Вторая максимальная дата  [new]
Вторая максимальная дата
Guest
То есть дату меньше максимально на минимальное значение.
Например таблица T

dt
01.01.2010
02.01.2010
03.01.2010
04.01.2010
05.01.2010

select max(dt) from T - это будет максимальная дата
05.01.2010

А нужно как то получить 04.01.2010
26 мар 17, 01:10    [20333052]     Ответить | Цитировать Сообщить модератору
 Re: Вторая максимальная дата  [new]
Santa89
Member

Откуда:
Сообщений: 1500
Вторая максимальная дата,
Через Top2 в сочетании с Top1 можно, а лучше всего почитайте про функцию Dense_Rank
26 мар 17, 01:16    [20333064]     Ответить | Цитировать Сообщить модератору
 Re: Вторая максимальная дата  [new]
Вторая максимальная дата
Guest
Santa89,

То есть вы имеете ввиду ?


select TOP 1 P.dt
from (
select TOP 2 dt from T
order by asc ) P

Спасибо почитаю про функцию
26 мар 17, 01:23    [20333077]     Ответить | Цитировать Сообщить модератору
 Re: Вторая максимальная дата  [new]
Santa89
Member

Откуда:
Сообщений: 1500
Вторая максимальная дата,
да, но так никто не делает. юзайте лучше dense rank
26 мар 17, 01:37    [20333090]     Ответить | Цитировать Сообщить модератору
 Re: Вторая максимальная дата  [new]
iljy
Member

Откуда:
Сообщений: 8711
Вторая максимальная дата
Santa89,

То есть вы имеете ввиду ?


select TOP 1 P.dt
from (
select TOP 2 dt from T
order by asc ) P

Спасибо почитаю про функцию


Вариант с TOP сработает, только если у вас даты уникальны, при этом на уникальных датах он может работать быстрее. Если даты не уникальны, то DENSE_RANK.
26 мар 17, 07:46    [20333278]     Ответить | Цитировать Сообщить модератору
 Re: Вторая максимальная дата  [new]
Santa89
Member

Откуда:
Сообщений: 1500
iljy,
да, все верно
26 мар 17, 09:49    [20333342]     Ответить | Цитировать Сообщить модератору
 Re: Вторая максимальная дата  [new]
Вторая максимальная дата
Guest
iljy,

Мне удалось проранжировать данные по дате используя функцию DENSE_RANK.
И теперь встал вопрос, а как собственно обращаться к ее результатам.

То есть я могу например непосредственно выводить записи с рангом 1 - это будет минимальная дата,
так и с любым другим заранее определенным в условии where рангом.

Но непонятно, как теперь найти максимальную дату, как задать условие для ее нахождения.

SELECT RES.dt
FROM (
SELECT DENSE_RANK () OVER (ORDER BY dt) AS denseRankNum
FROM T ) RES
WHERE denseRankNum = 2 --Как мне здесь, в подзапросе найти максимальный ранг. ?
30 мар 17, 20:31    [20352413]     Ответить | Цитировать Сообщить модератору
 Re: Вторая максимальная дата  [new]
invm
Member

Откуда: Москва
Сообщений: 9688
Вторая максимальная дата
Но непонятно, как теперь найти максимальную дату
SELECT RES.dt
FROM (
SELECT dt, DENSE_RANK () OVER (ORDER BY dt DESC) AS denseRankNum
FROM T ) RES
WHERE denseRankNum = 1
30 мар 17, 20:41    [20352428]     Ответить | Цитировать Сообщить модератору
 Re: Вторая максимальная дата  [new]
invm
Member

Откуда: Москва
Сообщений: 9688
WHERE denseRankNum = 2 конечно же.
30 мар 17, 20:42    [20352432]     Ответить | Цитировать Сообщить модератору
 Re: Вторая максимальная дата  [new]
Вторая максимальная дата
Guest
invm,
А если количество рангов я не знаю. И максимальный ранг может быть любой?
30 мар 17, 21:34    [20352550]     Ответить | Цитировать Сообщить модератору
 Re: Вторая максимальная дата  [new]
invm
Member

Откуда: Москва
Сообщений: 9688
Вторая максимальная дата
А если количество рангов я не знаю. И максимальный ранг может быть любой?
Вы волшебное слово "DESC" (выделено) видите?
30 мар 17, 21:48    [20352582]     Ответить | Цитировать Сообщить модератору
 Re: Вторая максимальная дата  [new]
Преобразование типов
Guest
invm,

Да, действительно! Вы правы.
Очень занимательная функция.
Они вообще все 4 очень интересные.

Спасибо
30 мар 17, 22:03    [20352627]     Ответить | Цитировать Сообщить модератору
 Re: Вторая максимальная дата  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Как вариант. Тут присвоится последнее значение датасета, т.е. в нашем случае второе сверху.

select top 2 @result = Mydate
from...
order by Mydate desc
31 мар 17, 10:47    [20353586]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить