2017-09-13 63 views
2

我準備了以下我的真實案例的簡化示例:SQL Fiddle。很顯然,我已經想出了兩種獲取相同信息的方式,即:爲每個用戶提供的一組最新事件給予事件類型的一些附加約束。SQL - 爲符合給定條件的每個用戶選擇最後一個事件

兩種方式都可以獲得有關最新事件user和時間occurred的信息。但是,我需要知道該事件的idtype

我該如何去解決這個問題?

理想情況下,我希望解決方案適用於任何SQL數據庫,而不僅僅是PostgreSQL。

回答

2

在Postgres裏,我會用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