SQL TRUNC 后没有重复的时间戳

SQL no duplicate timestamps after TRUNC

我有一个包含一些值的数据库,这些值有时间戳。我所做的是将这些时间戳截断为分钟,因为这些值是以一分钟的频率测量的。 由于一些误差,而测量有时会在一分钟内出现两个值。我想在同一分钟内去掉第二个值,所以每分钟只有一个值。

select trunc(mv.time,'MI') as "minTime",
/*
    get all the required measurement-values
*/
from measurementvalue mv
where mv.MEASUREMENTDEVICE_ID = 1 AND mv.time > '16.03.15 00:00:00'
GROUP BY mv.time
ORDER BY mv.time ASC

我得到的是这样的

     minTIME      | TEMPERATURE | PRESSURE | ...
16.03.15 18:06:00 |   42,1337   |   9000   | ...
16.03.15 18:06:00 |   12,3456   |   1234   | ...

但我只想要第一行。

使用 NOT EXISTS 排除第一(或最后)行(如果存在同一分钟的另一行):

select *
from measurementvalue mv1
where not exists (select 1 from measurementvalue mv2
                  where mv1.*down_to_minute_part* = mv2.*down_to_minute_part*
                    and mv2.time > mv1.time)

您必须根据您的 dbms 的方式调整 down_to_minute_part。 (EXTRACT 用于 ANSI SQL。)

您可以使用 row_number():

select mv.*
from (select mv.*, trunc(mv.time, 'MI') as minTime
             row_number() over (partition by trunc(mv.time, 'MI')
                                order by mv.time) as seqnum
      from measurementvalue mv
      where mv.MEASUREMENTDEVICE_ID = 1 AND mv.time > '16.03.15 00:00:00'
     ) mv
where seqnum = 1
order by mv.time asc;