次の元のテーブルがあります
私が欲しいのは、最新の history_id を別個の new_id で取得することです。次のように:
このdistinct_but_only_one_columnを見つけましたが、個別の 1 つの列を取得する方法しか含まれていません。私を助けてください。
次の元のテーブルがあります
私が欲しいのは、最新の history_id を別個の new_id で取得することです。次のように:
このdistinct_but_only_one_columnを見つけましたが、個別の 1 つの列を取得する方法しか含まれていません。私を助けてください。
テーブルの名前が であると仮定すると、これは機能します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;
(しかし、これは私にとって「正しい」とは決して感じません)
これを使ってみて、
select max(history_id),news_id,newsheadline from
table1 group by news_id,newsheadline
を使用する代わりに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;