作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了 DISTINCT ON
子句,我可以用它来连接另一个表的最后一行。例如,以下查询将显示所有用户的最后访问权限:
SELECT DISTINCT ON (user.id)
user.id, access.login_time, access.geocoded_location
FROM user
JOIN access
on access.user_id = user.id
ORDER BY user.id ASC, access.id DESC
现在我想获取最后一次访问是在 2014 年之前的用户。
SELECT DISTINCT ON (user.id)
user.id, access.login_time, access.geocoded_location
FROM user
JOIN access
on access.user_id = user.id
WHERE
access.login_time < '2014-01-01 00:00:00+00'
ORDER BY user.id ASC, access.id DESC
此查询是要检索我期望的用户,还是要首先在所有用户中获取 2014 年 1 月之前的最后访问权限?
更一般地说,postgres
会先过滤行然后删除重复项,还是先删除重复项再过滤行?
如果它在删除重复项之前进行过滤,您还有哪些其他解决方案建议?
最佳答案
where
子句中的条件在 from
子句中的派生表构建之后和 select
列表之前应用。因此,您需要将条件应用于整个查询的结果
select *
from (
select distinct on (user.id)
user.id, access.login_time, access.geocoded_location
from
user
inner join
access on access.user_id = user.id
order by user.id asc, access.id desc
) s
where login_time < '2014-01-01 00:00:00+00'
关于postgresql - 通过 DISTINCT ON 子句按行 "grouped"过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24069933/
我是一名优秀的程序员,十分优秀!