0

我必须从表中创建一个视图,该视图必须只包含一组重复项中的最新元素。这是一项简单的任务,但问题是该表未规范化。每条记录由三个字符串列标识: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。

4

4 回答 4

2
select distinct on (transponder, country, system) * from some_table
order by transponder, country, system, time desc
于 2013-10-01T14:35:38.190 回答
1

按转发器、国家、系统从表组中选择转发器、国家、系统最大(时间);

这将为您提供跨分组记录聚合的不同记录(聚合列的转发器、国家、系统(在本例中为时间)。

于 2013-10-01T14:37:45.790 回答
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

于 2013-10-01T14:47:51.883 回答
0

Postgre 不是我的事,但这看起来就像一个按 SQL 语句分组的问题:

SELECT transponder, country, system, MAX(time)
  FROM your_table
GROUP BY transponder, country, system
;
于 2013-10-01T14:39:05.227 回答