Postgres查询找到UNique最新条目

时间:2015-07-20 09:27:15

标签: sql postgresql greatest-n-per-group

我有一个名为ip_storage_table的Postgres表,它存储了三个值ip_address,virtual_id和time_stamp

这之间的实际关系最初是所有I / P都有与之关联的virtual_id,例如:

192.168.1.1 has 3000 at 2015-07-20 16:00:00
192.168.1.2 has 1000 at 2015-07-20 16:00:00
192.168.1.3 has 2000 at 2015-07-20 16:00:00
192.168.1.2 has 4000 at 2015-07-20 17:00:00
192.168.1.1 has 2000 at 2015-07-20 18:00:00

此表包含特定时间戳中每个I / P地址的virtual_id,因此它可以包含更多条目,如

{{1}}

我想运行一个查询:

  1. virtual_id在输出中仅出现一次
  2. 与virtual_id关联的i / p应随附
  3. 并且virtual_id应该是最新的,即在上面的例子中,2000将是192.168.1.1和18:00:00的时间戳,并且所有以前的值都不会显示
  4. 如果两个虚拟ID具有相同的i / p,则输出中仅显示最新的一个
  5. 我本来可以上传数据库的图像,但是我使用的是Linux,无法找到图像编辑工具,如果你不能通过上面的描述获得数据库视图让我知道,我会再试一次< / p>

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以使用distinct on

select distinct on (virtual_id) t.*
from mytable t
order by virtual_id, time_stamp desc;

这将返回每个virtual_id及其最近的行。

答案 1 :(得分:0)

您可以尝试: -

SELECT i/p, MIN(virtual_id), MAX(timestamp)
FROM YOUR_TABLE
GROUP BY i/p;

希望这有帮助。

看小提琴。 http://sqlfiddle.com/#!15/d7905/5