我必须从表创建一个视图,该视图必须只包含一组重复项中的最新元素。这是一项简单的任务,但问题是该表未规范化。每条记录由三个字符串列标识:Transponder,Country和System。我无法在数据库结构中引入任何更改。应根据“时间”列返回最新元素。所以有这样的数据:
Transponder | Country | System | Time
--------------------------------------------
AAA | BBB | CCC | 2012-01-01
AAA | BBB | CCC | 2010-01-01
AAA | BBB | CCC | 2013-01-01
AAA | BAB | DDD | 2011-01-01
AAA | BAB | DDD | 2010-01-01
我希望我的视图只返回两行:
AAA | BBB | CCC | 2013-01-01
AAA | BAB | DDD | 2011-01-01
我怎样才能做到这一点?我使用Postgresql 9.2。
答案 0 :(得分:2)
select distinct on (transponder, country, system) * from some_table
order by transponder, country, system, time desc
答案 1 :(得分:1)
通过转发器,国家,系统从TABLE组中选择转发器,国家,系统最大(时间);
这将为您提供在分组记录中汇总的独特记录(汇总列的转发器,国家,系统(在本例中为时间)。
答案 2 :(得分:0)
Postgre不是我的事,但这看起来就像一个SQL语句问题组:
SELECT transponder, country, system, MAX(time)
FROM your_table
GROUP BY transponder, country, system
;
答案 3 :(得分:0)
你可以使用......
SELECT Transporter ,
Country ,
[System] ,
[TIME]
FROM ( SELECT Transporter ,
Country ,
[System] ,
[TIME] ,
RANK() OVER ( PARTITION BY Transporter, Country, [System] ORDER BY [TIME] DESC ) AS [order]
FROM tableName
) AS a
WHERE a.[order] = 1
我需要仔细检查PostgresSQL
的语法。