1. ホーム
  2. sql

[解決済み] ある列の最大値を持つ行を取得する

2022-03-16 07:52:30

質問

表です。

UserId, Value, Date.

各UserIdのmax(Date)のUserId, Valueを取得したいのですが。つまり、各UserIdのうち、最新の日付を持つUserIdのValueです。これを単純にSQLで行う方法はありますか?(できればオラクルで)

更新してください。 曖昧な表現で申し訳ありませんが、私はすべてのUserIdsを取得する必要があります。しかし、各UserIdについて、そのユーザーが最新の日付を持っている行のみを取得する必要があります。

解決方法は?

これは、my_dateカラムの値がそのユーザIDのmy_dateの最大値と等しいすべての行を検索します。この場合、そのuseridの最大値が複数の行に存在する場合は、複数の行を取得することができます。

select userid,
       my_date,
       ...
from
(
select userid,
       my_date,
       ...
       max(my_date) over (partition by userid) max_my_date
from   users
)
where my_date = max_my_date

解析関数はロックだ。

編集部:最初のコメントについてですが.

分析クエリと自己結合を使用すると、分析クエリの目的を達成できません。

このコードには自己結合はありません。代わりに、分析関数を含むインラインビューの結果に述語が置かれています。

Oracleのデフォルトのウィンドウは、パーティションの最初の行から現在の行までです。

windowing句はorder by句が存在する場合にのみ適用される。order by句がない場合、デフォルトではウィンドウズ句は適用されず、明示的に指定することもできない。

コードは動作します。