postgresql 在用户和条目之间的1:n关系中,如何查找每个用户最早条目的属性?

3hvapo4f  于 2023-01-30  发布在  PostgreSQL
关注(0)|答案(1)|浏览(150)

PostgreSQL中,我有两个表:

  • 用户(用户ID(PK整数),用户名(字符可变))
  • 访问(访问ID(PK整数),* 用户ID *(FK用户,整数),访问日期(日期),访问原因(整数),问候语(字符可变))

1个用户可以访问我n次。每个访问条目都有一个日期。
现在我想查询一个用户列表,这些用户最早(VisitDate)访问VisitReason=123的次数为Greeting。(每个用户占1行。)(我对没有相关访问的用户不感兴趣。)
在PostgreSQL中做这件事最简单的方法是什么?
表现不重要,这是一次性任务。

0x6upsns

0x6upsns1#

我能想到的最简洁的方法是使用FETCH FIRST ROWS WITH TIES子句,对于每个UserID的第一次约会排名为1的ROW_NUMBER

SELECT UserID, Greeting
FROM visits
WHERE VisitReason = 123
ORDER BY ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY VisitDate)
FETCH FIRST 1 ROWS WITH TIES

如果您还需要捕获用户名,则需要执行额外的连接操作(相对于users表而言):

SELECT u.UserName, v.Greeting
FROM      users  u
LEFT JOIN visits v ON u.UserID = v.UserID
WHERE v.VisitReason = 123
ORDER BY ROW_NUMBER() OVER(PARTITION BY u.UserID ORDER BY v.VisitDate)
FETCH FIRST 1 ROWS WITH TIES

相关问题