0

一連の重複から最新の要素のみを含む必要があるテーブルからビューを作成する必要があります。簡単な作業ですが、問題はテーブルが正規化されていないことです。各レコードは、Transponder、Country、および System の 3 つの文字列列によって識別されます。データベース構造を変更することはできません。Time 列に基づいて、最新の要素が返されます。そのようなデータを持っている:

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

ビューで 2 行のみを返すようにします。

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

Postgre は私の好みではありませんが、これは group by SQL ステートメントの問題のように見えます。

SELECT transponder, country, system, MAX(time)
  FROM your_table
GROUP BY transponder, country, system
;
于 2013-10-01T14:39:05.227 に答える
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 に答える