2017-09-13 2 views
2

私は実際のケースの次の簡単な例を用意しました:SQL Fiddleイベントタイプにいくつかの追加の制約があると、各ユーザの最新のイベントのセットが表示されます。これは次の2つの方法で同じ情報を得ることができます:SQL - 指定された条件に一致する各ユーザーの最後のイベントを選択する

最新のイベントのuserと時間occurredに関する情報を両方とも私に入手してください。しかし、そのイベントのidtypeも知っておく必要があります。

どうすればそれを取得できますか?

理想的には、ソリューションはPostgreSQLだけでなくあらゆるSQLデータベースでも機能したいと思っています。 Postgresので

答えて

2

、私はdistinct onを使用します。

select distinct on (username) e.* 
from events e 
where type > 0 
order by username, "time" desc; 

(。これは、すべてのユーザーのための時間で注文しませんが、それはまた別のサブクエリを必要とする)

をより一般的な解決のために、私が使用しますrow_numbe()

select e.* 
from (select e.*, 
      row_number() over (partition by username order by "time" desc) as seqnum 
     from events e 
    ) e 
where seqnum = 1 
order by "time" desc 
関連する問題