2015-08-30 3 views
0

это мой SQL результат запроса сервера, мне просто нужно только один данные от одной минуты, в настоящее время пятая минута содержит множество данных, так как 10-й минуте тожеВыберите 1-й результат из результирующего набора

мой запрос SQL Server

select top 1000 val1,val2,timestamp 
from VTagValue 
where datepart(mi,timestamp)%5=0 ` 

83.2 83.4 2015-08-29 13:05:53.0730000 +08:00 
83.2 83.4 2015-08-29 13:05:55.0730000 +08:00 
83.2 83.4 2015-08-29 13:05:57.0730000 +08:00 
84.0 84.2 2015-08-29 13:10:01.0730000 +08:00 
84.0 84.2 2015-08-29 13:10:03.0730000 +08:00 
84.0 84.2 2015-08-29 13:10:05.0730000 +08:00 

ожидаемый результат

83.2 83.4 2015-08-29 13:05:53.0730000 +08:00 
84.0 84.2 2015-08-29 13:10:01.0730000 +08:00 

ответ

3
select val1, val2, timestamp 
from 
(
select val1,val2, timestamp, 
row_number() over(partition by datepart(mi,timestamp) order by timestamp) as rn 
from VTagValue 
where datepart(mi,timestamp)%5=0 
) t 
where rn = 1; 

Вы можете использовать row_number получить самые ранние времена в течение минуты.

Редактировать: Согласно комментариям Op в:.

select val1, val2, timestamp 
from 
(
select val1,val2, timestamp, 
row_number() over(partition by datepart(hh,timestamp),datepart(mi,timestamp) 
        order by timestamp) as rn 
from VTagValue 
where datepart(mi,timestamp)%5=0 
) t 
where rn = 1; 
+0

этот код работает, но логика была пропущена в одном сценарии, система получает только первый час результат, скажем, если наш интервал 8 утра до 10 часов, то это извлекает только 8am to 9am result?, есть ли какое-либо решение для этого? – RJ10

+0

Вы также должны разделить на 'hour' часть datetime. Посмотрите, является ли измененная версия тем, что вы ищете. –

Смежные вопросы