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

Откуда:
Сообщений: 42
Доброго времени суток!

Имеется БД с таблицей Table с тремя полями Id - код канала, Value - значение канала и DT - метка времени значения канала.
В эту таблицу каждые несколько секунд пишутся данные.

Стоит задача каждую минуту делать выборку данных с определённым Id, при этом необходимо чтобы поле DT содержало самую последнюю метку времени для данного Id.
То есть каждую минуту необходимо делать срез самых актуальных на данный момент данных.

Как вариант можно сделать отдельный запрос для каждого Id, например так:
SELECT TOP 1 * FROM Table WHERE Id='1' order by DT desc;
SELECT TOP 1 * FROM Table WHERE Id='2' order by DT desc;
SELECT TOP 1 * FROM Table WHERE Id='3' order by DT desc;

и так далее для всех необходимых Id.

А можно ли реализовать этот алгоритм в одном запросе SELECT?
13 ноя 13, 07:12    [15119098]     Ответить | Цитировать Сообщить модератору
 Re: Запрос SELECT  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6202
;with cte as (
  select *, row_number() over (partition by Id order by DT desc) ord
  from [Table]
)
select * from cte where ord=1 order by Id
13 ноя 13, 07:16    [15119099]     Ответить | Цитировать Сообщить модератору
 Re: Запрос SELECT  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
select top 1 * with ties
from [Table]
order by row_number() over (partition by Id order by DT desc) 
13 ноя 13, 07:37    [15119115]     Ответить | Цитировать Сообщить модератору
 Re: Запрос SELECT  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
sorry
select  top 1 with ties *
from [Table]
order by row_number() over (partition by Id order by DT desc) 
13 ноя 13, 07:42    [15119121]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить