gpt4 book ai didi

postgresql - 通过 DISTINCT ON 子句按行 "grouped"过滤

转载 作者:行者123 更新时间:2023-11-29 13:59:27 26 4
gpt4 key购买 nike

我遇到了 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com