PostgreSQL 为所有用户获取最新 rows/events
PostgreSQL get latest rows/events for all users
使用 PostgreSQL 8.x (AWS Redshift)
我有一个这样的数据库结构:
userId: varchar, tstamp: datetime, event: string
假设我有以下几行
u2, t1, e1
u1, t2, e2
u2, t3, e1
u1, t4, e2
其中 u1 和 u2 是用户 ID,t[1..4] 是时间戳,其中 t1>t2>t3>t4
e1 和 e2 是事件类型。
那么如何获取所有用户执行的最新事件。所以查询的输出将是:
u2, t3, e1
u1, t4, e2
试图理解使用:
https://en.wikipedia.org/wiki/Correlated_subquery
和
PostgreSQL Selecting Most Recent Entry for a Given ID
但我想我是一个迟钝的大脑。无法获取。
您可以使用 Postgres 做到这一点 DISTINCT ON
:
select distinct on(userId) userId, tstamp, event
from events
order by userId, tstamp desc;
对于 Redshift,您也许可以 this variant from one of my previous answers:
select userId, tstamp, event from (
select userId, tstamp, event,
row_number() over (partition by userId order by tstamp desc) as rownumber
from events
) foo
where rownumber = 1
select t1.userid,
t1.date,
t1.event
from table t1
where t1.date= (select max(t2.date)
from table t2
where t2.userid = t1.userid);
使用 PostgreSQL 8.x (AWS Redshift)
我有一个这样的数据库结构:
userId: varchar, tstamp: datetime, event: string
假设我有以下几行
u2, t1, e1
u1, t2, e2
u2, t3, e1
u1, t4, e2
其中 u1 和 u2 是用户 ID,t[1..4] 是时间戳,其中 t1>t2>t3>t4 e1 和 e2 是事件类型。
那么如何获取所有用户执行的最新事件。所以查询的输出将是:
u2, t3, e1
u1, t4, e2
试图理解使用: https://en.wikipedia.org/wiki/Correlated_subquery 和 PostgreSQL Selecting Most Recent Entry for a Given ID
但我想我是一个迟钝的大脑。无法获取。
您可以使用 Postgres 做到这一点 DISTINCT ON
:
select distinct on(userId) userId, tstamp, event
from events
order by userId, tstamp desc;
对于 Redshift,您也许可以 this variant from one of my previous answers:
select userId, tstamp, event from (
select userId, tstamp, event,
row_number() over (partition by userId order by tstamp desc) as rownumber
from events
) foo
where rownumber = 1
select t1.userid,
t1.date,
t1.event
from table t1
where t1.date= (select max(t2.date)
from table t2
where t2.userid = t1.userid);