2

次の元のテーブルがあります

元のテーブル

私が欲しいのは、最新の history_id を別個の new_id で取得することです。次のように:

望ましい結果

このdistinct_but_only_one_columnを見つけましたが、個別の 1 つの列を取得する方法しか含まれていません。私を助けてください。

4

3 に答える 3

3

テーブルの名前が であると仮定すると、これは機能しますx

select * from x
where history_id in (
   select max(history_id) from x group by news_id
);

出力:

 history_id | news_id |      news_headline       
------------+---------+--------------------
          1 |       5 | My test Headline
         13 |       7 | My test Headline
          3 |       4 | New Headline
          4 |       6 | History Headline

これも機能します(そしてより簡単です):

select distinct on (news_id) *
from x
order by news_id, history_id desc;

(しかし、これは私にとって「正しい」とは決して感じません)

于 2014-08-15T05:38:19.803 に答える
0

これを使ってみて、

select max(history_id),news_id,newsheadline from 
table1 group by news_id,newsheadline
于 2014-08-15T05:37:15.997 に答える
0

を使用する代わりにdistinct on、ウィンドウ関数を使用できます。これは通常、より柔軟ですが、使用するよりも少し遅くなります。distinct on

select history_id, news_id, news_headline
from (
   select history_id, news_id, news_headline,
          row_number() over (partition by news_id order by history_id desc) as rn
   from the_table
) t
where rn = 1
order by history_id;
于 2014-08-15T05:37:27.747 に答える