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

Откуда: РБ
Сообщений: 950
добрый день, помогите плз составить запрос,
есть N приборов, от которых приходят данные с разным интервалом,
как составить запрос чтобы получить по всем приборам N последних данных?
для одного прибора не проблема, а для N прям беда )
результат :
id_set name_device rn data
5 Прибор 1 1 17:17:00
5 Прибор 1 2 17:10:00
5 Прибор 1 3 17:09:00
5 Прибор 1 4 17:08:00
5 Прибор 1 5 17:07:00
6 Прибор 2 1 17:17:00
6 Прибор 2 2 17:16:00
6 Прибор 2 3 17:15:00
6 Прибор 2 4 17:14:00
6 Прибор 2 5 17:13:00

--
declare @user_device table
(
	id_set		int			not null primary key clustered,
	name_device	varchar(50) not null
)
insert into @user_device(id_set, name_device)values(5, 'Прибор 1')
insert into @user_device(id_set, name_device)values(6, 'Прибор 2')
--
declare @device_data table
(
	id_set	int				not null,
	data	time(0)			not null
)
insert into @device_data(id_set, data)values(5, '17:00:00')
insert into @device_data(id_set, data)values(5, '17:01:00')
insert into @device_data(id_set, data)values(5, '17:04:00')
insert into @device_data(id_set, data)values(5, '17:05:00')
insert into @device_data(id_set, data)values(5, '17:06:00')
insert into @device_data(id_set, data)values(5, '17:07:00')
insert into @device_data(id_set, data)values(5, '17:08:00')
insert into @device_data(id_set, data)values(5, '17:09:00')
insert into @device_data(id_set, data)values(5, '17:10:00')
insert into @device_data(id_set, data)values(5, '17:17:00')
--
insert into @device_data(id_set, data)values(6, '17:02:00')
insert into @device_data(id_set, data)values(6, '17:03:00')
insert into @device_data(id_set, data)values(6, '17:10:00')
insert into @device_data(id_set, data)values(6, '17:11:00')
insert into @device_data(id_set, data)values(6, '17:12:00')
insert into @device_data(id_set, data)values(6, '17:13:00')
insert into @device_data(id_set, data)values(6, '17:14:00')
insert into @device_data(id_set, data)values(6, '17:15:00')
insert into @device_data(id_set, data)values(6, '17:16:00')
insert into @device_data(id_set, data)values(6, '17:17:00')
--
declare @count int
set @count = 5
--
select x.id_set, x.name_device, cast(ROW_NUMBER() OVER (ORDER BY x.data desc) as int) AS rn, x.data
from(
select top(@count) u.id_set, u.name_device, d.data
from @user_device as u
inner join @device_data as d
on u.id_set = d.id_set
where u.id_set = 5--для одного прибора
order by d.data desc
)x
order by x.data desc
--
10 окт 14, 19:23    [16689121]     Ответить | Цитировать Сообщить модератору
 Re: запрос на выборку последних N данных из N устройств  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37052
declare 
    @m  int = 5
    , @n int = 2

select
    a.id_set
    , a.data
from (
    select
        a.id_set
        , a.data
        , rn = row_number()  over ( partition by a.id_set order by a.data desc )
    from    @device_data a
    where
        a.id_set in ( select top (@n) x.id_set from @user_device x order by x.id_set )
) a
where
    a.rn <= @m


Сообщение было отредактировано: 10 окт 14, 19:31
10 окт 14, 19:29    [16689140]     Ответить | Цитировать Сообщить модератору
 Re: запрос на выборку последних N данных из N устройств  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37052
Если надо по всем, то where .. in ... просто закомментировать.
10 окт 14, 19:32    [16689147]     Ответить | Цитировать Сообщить модератору
 Re: запрос на выборку последних N данных из N устройств  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
Гавриленко Сергей Алексеевич,
большое спасибо! Вы мне очень помогли
10 окт 14, 20:17    [16689288]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить