first_value()
を使用することにより、同じ効果をOracleで再現できます。 関数またはrank()
のいずれかを使用して またはrow_number()
関数。
どちらのバリアントもPostgresで機能します。
first_value()
select distinct col1,
first_value(col2) over (partition by col1 order by col2 asc)
from tmp
first_value
パーティションの最初の値を示しますが、行ごとに繰り返すため、distinct
と組み合わせて使用する必要があります。 パーティションごとに1つの行を取得します。
row_number()
/ rank()
select col1, col2 from (
select col1, col2,
row_number() over (partition by col1 order by col2 asc) as rownumber
from tmp
) foo
where rownumber = 1
row_number()
を置き換える rank()
を使用 この例では、同じ結果が得られます。
このバリアントの特徴は、最初のNをフェッチするために使用できることです。 rownumber = 1
を変更するだけで、特定のパーティションの行(「最後の3つの更新」など) rownumber <= N
へ 。