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

Откуда:
Сообщений: 5
Здравствуйте!

Есть таблица истории значений экономического показателя, выгружаемого с официального сайта на ежедневной основе.
column_name - datetime - дата и время значения (на самом деле только дата, помесячно)
value - float - величина значения
downdatetime - datetime - дата и время загрузки значения с официального сайта.

Есть как одинаковые значения (value) на одну и ту же дату (column_name), так и различающиеся.
Задача: из значений с одним и тем же column_name оставить только те, у которых максимальное downdatetime.

Мой запрос:
SELECT
  column_name
  ,MAX(downdatetime) as downdatetime
  ,MAX(value) as value
FROM dbo.stathistory
GROUP BY column_name

на выходе дает выборку с максимальными value, но это неправильно.
Последнее скачанное значение может быть и меньше предыдущих.

Прошу помощи. Таблица со значениями для теста в файле.
Заранее спасибо!

К сообщению приложен файл (example.txt - 5Kb) cкачать
7 авг 13, 13:14    [14675414]     Ответить | Цитировать Сообщить модератору
 Re: Выборка последних (новых) значений показателя  [new]
так, как-то
Guest
select top 1 with ties *
from dbo.stathistory
order by row_number()over(partition by column_name order by downdatetime desc)
7 авг 13, 13:19    [14675455]     Ответить | Цитировать Сообщить модератору
 Re: Выборка последних (новых) значений показателя  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
NixCore,
select top 1 with ties
*
from dbo.stathistory
order by column_name desc,downdatetime desc
7 авг 13, 13:34    [14675567]     Ответить | Цитировать Сообщить модератору
 Re: Выборка последних (новых) значений показателя  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
Мистер Хенки
NixCore,
select top 1 with ties
*
from dbo.stathistory
order by column_name desc,downdatetime desc
И что будет? Все строки с одним и тем же column_name и downdatetime?
7 авг 13, 13:44    [14675631]     Ответить | Цитировать Сообщить модератору
 Re: Выборка последних (новых) значений показателя  [new]
NixCore
Member

Откуда:
Сообщений: 5
Небольшая ремарка. Из таблицы надо получить не одно значение, а несколько.
То есть не только апрель 2013, но и март, февраль. Т.к. по ним тоже каждый раз выгружаются разные значения.

Формат выходных данных запроса:
2013.04.01 00:00:00 | <value> | <last downdatetime>
2013.03.01 00:00:00 | <value> | <last downdatetime>
2013.02.01 00:00:00 | <value> | <last downdatetime>
...
где <value> - самое новое значение на месяц апрель, март, февраль и т.п.
7 авг 13, 14:03    [14675751]     Ответить | Цитировать Сообщить модератору
 Re: Выборка последних (новых) значений показателя  [new]
NixCore
Member

Откуда:
Сообщений: 5
Было бы хорошо, если в моем запросе, в group by можно было бы не учитывать value. Т.е. не важно какой value, главное max downdatetime для каждого уникального column_name.
Но простыми способами у меня не получается.
7 авг 13, 14:06    [14675765]     Ответить | Цитировать Сообщить модератору
 Re: Выборка последних (новых) значений показателя  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
NixCore
Небольшая ремарка. Из таблицы надо получить не одно значение, а несколько.
То есть не только апрель 2013, но и март, февраль. Т.к. по ним тоже каждый раз выгружаются разные значения.

Формат выходных данных запроса:
2013.04.01 00:00:00 | <value> | <last downdatetime>
2013.03.01 00:00:00 | <value> | <last downdatetime>
2013.02.01 00:00:00 | <value> | <last downdatetime>
...
где <value> - самое новое значение на месяц апрель, март, февраль и т.п.
Причём, небось, за март нужна запись даже если данных за март нет?
7 авг 13, 14:07    [14675773]     Ответить | Цитировать Сообщить модератору
 Re: Выборка последних (новых) значений показателя  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
iap
Мистер Хенки
NixCore,
select top 1 with ties
*
from dbo.stathistory
order by column_name desc,downdatetime desc
И что будет? Все строки с одним и тем же column_name и downdatetime?

будет последнее максимальное значение. Если все последние максимальные в разрезе column_name, то
 	

select top 1 with ties *
from dbo.stathistory
order by dense_rank()over(partition by column_name order by downdatetime desc)
7 авг 13, 14:08    [14675780]     Ответить | Цитировать Сообщить модератору
 Re: Выборка последних (новых) значений показателя  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
NixCore
Было бы хорошо, если в моем запросе, в group by можно было бы не учитывать value. Т.е. не важно какой value, главное max downdatetime для каждого уникального column_name.
Но простыми способами у меня не получается.
Вам уже всё написали 14675455.
Осталось только прочитать.
7 авг 13, 14:08    [14675781]     Ответить | Цитировать Сообщить модератору
 Re: Выборка последних (новых) значений показателя  [new]
NixCore
Member

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

нет. только месяцы, существующие в column_name
7 авг 13, 14:10    [14675787]     Ответить | Цитировать Сообщить модератору
 Re: Выборка последних (новых) значений показателя  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
NixCore
iap,

нет. только месяцы, существующие в column_name
Тогда для Вас уже всё сделали
7 авг 13, 14:12    [14675797]     Ответить | Цитировать Сообщить модератору
 Re: Выборка последних (новых) значений показателя  [new]
NixCore
Member

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

Да, точно. Работает. Спасибо!
Вы профи!
7 авг 13, 14:13    [14675805]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить