仅检索一组数据的最新项目

时间:2019-08-16 05:16:23

标签: sql postgresql

我在Postgres DB中有一组数据(但是该数据与DB无关)。数据总结了针对大量项目/日期对的一组安全扫描。我正在尝试返回所有项目的列表(唯一的),并且只返回最近的日期。

我一直在使用Python / Pandas进行此操作,但现在希望将其作为SQL查询自动执行。

给出以下形式的一组数据:

id, project, scanned date, [results...]

对于每个项目,我想返回最近的扫描日期(以及相关的-该日期的结果。结果都在一行中。

例如

id | project              | date       | vulncount1 | vulncount 2 | vulncount 3
1  | donutcalculator      | 01-01-1980 | 20         | 30          | 10
2  | icecreamoptimizer    | 01-10-1990 | 15         | 13          | 52
3  | donutcalculator      | 10-20-2011 | 20         | 100         | 2000
4  | snowmanmeltpredictor | 10-15-2012 | 10         | 11          | 12

我想要以下结果:

donutcalculator,10-20-2011
icecreamoptimizaer,01-10-1990
snowmanmeltpredictor,10-15-2012

如果有什么不同,那么上百万条记录中有100条记录,但是只有大约6000个不同的项目。

1 个答案:

答案 0 :(得分:3)

您可以在查询中使用DISTINCT ON

SELECT DISTINCT ON (project) *
FROM your_table
ORDER BY project, date DESC;

DISTINCT ON将把每个不同的项目缩小到仅一行。 ORDER BY子句必须包含project,并且date DESC确保它始终是每个项目的最后一行。

相关问题