我在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个不同的项目。
答案 0 :(得分:3)
您可以在查询中使用DISTINCT ON
:
SELECT DISTINCT ON (project) *
FROM your_table
ORDER BY project, date DESC;
DISTINCT ON
将把每个不同的项目缩小到仅一行。 ORDER BY
子句必须包含project
,并且date DESC
确保它始终是每个项目的最后一行。