Postgres查询查找UNique最新条目
Postgres query find UNique Latest entry
我有一个名为 ip_storage_table 的 Postgres Table,它存储三个值 ip_address 、 virtual_id 和一个 time_stamp
这之间的实际关系最初是所有 I/Ps 都有一个 virtual_id 与之关联,例如:
192.168.1.1 has 1000 at 2015-07-20 15:00:00
192.168.1.2 has 2000 at 2015-07-20 15:00:00
192.168.1.3 has 3000 at 2015-07-20 15:00:00
此 table 包含每个 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
我想 运行 查询这样的:
- virtual_id 在输出中只出现一次
- 与 virtual_id 关联的 i/p 应该随附
- 并且 virtual_id 应该是最新的,即在上面的示例中,2000 将与 192.168.1.1 一起使用 18:00:00 时间戳,并且不会显示其所有以前的值
- 如果两个虚拟 ID 具有相同的 i/p ,则输出中只会出现最新的
我本可以上传数据库的图像,但我正在使用 Linux 并且无法找到图像编辑工具,如果您无法通过上述描述获取数据库视图,请告诉我,我会再试一次
您可以简单地尝试:-
SELECT i/p, MIN(virtual_id), MAX(timestamp)
FROM YOUR_TABLE
GROUP BY i/p;
希望对您有所帮助。
见fiddle。 http://sqlfiddle.com/#!15/d7905/5
如果我没理解错的话,你可以用distinct on
:
select distinct on (virtual_id) t.*
from mytable t
order by virtual_id, time_stamp desc;
这将 return 每个 virtual_id
及其最近的行。
我有一个名为 ip_storage_table 的 Postgres Table,它存储三个值 ip_address 、 virtual_id 和一个 time_stamp
这之间的实际关系最初是所有 I/Ps 都有一个 virtual_id 与之关联,例如:
192.168.1.1 has 1000 at 2015-07-20 15:00:00
192.168.1.2 has 2000 at 2015-07-20 15:00:00
192.168.1.3 has 3000 at 2015-07-20 15:00:00
此 table 包含每个 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
我想 运行 查询这样的:
- virtual_id 在输出中只出现一次
- 与 virtual_id 关联的 i/p 应该随附
- 并且 virtual_id 应该是最新的,即在上面的示例中,2000 将与 192.168.1.1 一起使用 18:00:00 时间戳,并且不会显示其所有以前的值
- 如果两个虚拟 ID 具有相同的 i/p ,则输出中只会出现最新的
我本可以上传数据库的图像,但我正在使用 Linux 并且无法找到图像编辑工具,如果您无法通过上述描述获取数据库视图,请告诉我,我会再试一次
您可以简单地尝试:-
SELECT i/p, MIN(virtual_id), MAX(timestamp)
FROM YOUR_TABLE
GROUP BY i/p;
希望对您有所帮助。
见fiddle。 http://sqlfiddle.com/#!15/d7905/5
如果我没理解错的话,你可以用distinct on
:
select distinct on (virtual_id) t.*
from mytable t
order by virtual_id, time_stamp desc;
这将 return 每个 virtual_id
及其最近的行。