PostgreSQL中如何查询用户最早满足条件的访问记录的Greeting属性
最简实现方案
以下是满足需求的PostgreSQL查询语句:
SELECT DISTINCT ON (u.UserID) u.UserID, u.UserName, v.Greeting FROM Users u JOIN Visits v ON u.UserID = v.UserID WHERE EXISTS ( SELECT 1 FROM Visits v2 WHERE v2.UserID = u.UserID AND v2.VisitReason = 123 ) ORDER BY u.UserID, v.VisitDate ASC;
关键说明:
EXISTS子查询:筛选出存在VisitReason=123访问记录的用户,逻辑清晰直接。DISTINCT ON (u.UserID):PostgreSQL专属语法,确保每个用户仅返回一行结果,是实现该需求最简洁的方式之一。ORDER BY u.UserID, v.VisitDate ASC:指定分组后的排序规则,让每个用户的最早访问记录排在组内首位,从而被DISTINCT ON选中。
如果不需要返回UserName,可进一步简化:
SELECT DISTINCT ON (UserID) UserID, Greeting FROM Visits WHERE UserID IN (SELECT UserID FROM Visits WHERE VisitReason = 123) ORDER BY UserID, VisitDate ASC;
内容的提问来源于stack exchange,提问作者MrSnrub
相关产品推荐
相关产品推荐

