gpt4 book ai didi

PostgreSQL:为什么 random() 在连接中不起作用?

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

我正在尝试为 1 月 1 日之后开始使用我的应用程序的随机 500 位用户打印出所有事件的列表。

with random_users as (select distinct id, min(timestamp) as first_event
from log
group by id
having first_event >= '2019-01-01'
order by random()
limit 500)

select random_users.id, log.timestamp, log.event
from random_users left join log on log.id = random_users.id

使用 PostgreSQL 的 random() 很容易随机选择用户,但是当我尝试将其与 having first_event >= '2019-01-01' 的条件结合使用时 我遇到了一些问题。也就是说,timestamp 实际上在最终结果中对许多用户显示为 2019-01-01 之前,如下所示:

id    timestamp   event
5 2018-11-12 click
2 2018-12-27 purchase
7 2019-01-03 click

我想知道这是否与 random() 函数的工作方式有关,因为没有此功能的类似查询会给出预期结果 我怎样才能成功限制 random() 功能是否适用于在 2019-01-01 之后使用该应用程序的用户组?

最佳答案

既然我完全理解您的需求,请重新考虑一下。 PostgreSQL 有 DISTINCT ON您可以使用它来选择符合特定条件的第一行:

with user_first_events as (SELECT DISTINCT ON (id) id, timestamp, event
FROM log
WHERE timestamp >= '2019-01-01'
ORDER BY id, timestamp ASC)

SELECT * FROM user_first_events ORDER BY random() LIMIT 500

关于PostgreSQL:为什么 random() 在连接中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54038306/

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