如何解决如何在postgres上的递归CTE内的CROSS JOIN LATERAL中应用多个条件
我与此 question 有类似的要求,我想改进 answer 的 1a 部分
我能够使用该解决方案提取每个用户的最新行。但是,我的表有一个枚举列 log_type,其值为 SYSTEM LOG、APPLICATION LOG 和 DATABASE LOG,我想为每个用户获取三种最新的日志类型。
user_1 SYSTEM_LOG 2021-02-01 00:00:00.000+01
user_1 APPLICATION_LOG 2021-02-01 01:00:00.000+01
user_1 DATABASE_LOG 2021-02-01 00:30:00.000+01
...
我猜下面的查询只是在递归查询中获取一行
WITH RECURSIVE cte AS (
( -- parentheses required
SELECT user_id,log_type,log_date,payload
FROM log
WHERE log_date <= :mydate
ORDER BY user_id,log_date DESC NULLS LAST
LIMIT 1
)
UNION ALL
SELECT l.*
FROM cte c
CROSS JOIN LATERAL (
SELECT l.user_id,l.log_type,l.log_date,l.payload
FROM log l
WHERE l.user_id > c.user_id -- lateral reference
AND l.log_type > c.log_type -------------------- this is what i need
AND log_date <= :mydate -- repeat condition
ORDER BY l.user_id,l.log_date DESC NULLS LAST
LIMIT 1
) l
)
TABLE cte
ORDER BY user_id,log_type;
任何帮助将不胜感激。 谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。