查询每种类型的最新记录的SQL

问题描述 投票:-1回答:2

我有下面的表格。在哪里有很多不同类型的行。我只想在每种类型中选择最新记录。当然会有sensor_external_idsensor_id值不同的记录。

我需要同时按sensor_idtype分组。对于该组(sensor_idtype),我需要选择具有最新date的行。

id       average     date                    sensor_external_id    sensor_id    type  value
950                  2019-10-25 20:34:23     2C3AE834ED58          124          3     25
951      25          2019-10-25 20:34:23     2C3AE834ED58          124          0     25
952      56          2019-10-25 20:34:23     2C3AE834ED58          124          2     56
953      43          2019-10-25 20:34:23     2C3AE834ED58          124          1     41
1411                 2019-10-25 20:54:23     2C3AE834ED58          124          3     25
1412     24          2019-10-25 20:54:23     2C3AE834ED58          124          0     23
1413     53          2019-10-25 20:54:23     2C3AE834ED58          124          2     47
1414     41          2019-10-25 20:54:24     2C3AE834ED58          124          1     36

在这种情况下,我需要确切的结果:

id       average     date                    sensor_external_id    sensor_id    type  value
1411                 2019-10-25 20:54:23     2C3AE834ED58          124          3     25
1412     24          2019-10-25 20:54:23     2C3AE834ED58          124          0     23
1413     53          2019-10-25 20:54:23     2C3AE834ED58          124          2     47
1414     41          2019-10-25 20:54:24     2C3AE834ED58          124          1     36

我试图按typedate分组,但没有成功。

有什么想法吗?

sql greatest-n-per-group
2个回答
1
投票

使用row_number()

   Select * from(  Select *, 
      row_number() over
    (partition by type order by date desc)
    from table) rn) t where t.rn=1

0
投票

这是典型的每组最多-n个问题。在大多数RDBMS上通常具有良好性能的通用解决方案是使用相关子查询:

select t.*
from mytable t
where t.date = (
    select max(t1.date) from mytable t1 where t1.type = t.type
)

为了提高性能,您需要在(type, date)上建立索引。


如果您想要每个type sensor_id的最新记录,则:

select t.*
from mytable t
where t.date = (
    select max(t1.date) 
    from mytable t1 
    where t1.type = t.type and t1.sensor_id = t.sensor_id
)
© www.soinside.com 2019 - 2024. All rights reserved.