gpt4 book ai didi

sql - 使用 DISTINCT 子句过滤数据但仍拉取其他非 DISTINCT 字段

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

我正在尝试在 Postgresql 中编写一个查询,该查询提取一组有序数据并按不同的字段对其进行过滤。我还需要从同一表行中提取其他几个字段,但需要将它们排除在不同的评估之外。示例:

  SELECT DISTINCT(user_id) user_id, 
created_at
FROM creations
ORDER BY created_at
LIMIT 20

我需要 user_idDISTINCT,但不关心 created_at 日期是否唯一。因为 created_at 日期包含在评估中,所以我在结果集中得到了重复的 user_id

此外,数据必须按日期排序,因此在这里不能使用 DISTINCT ON。它要求 DISTINCT ON 字段是 ORDER BY 子句中的第一个字段,但不会提供我寻求的结果。

如何正确使用 DISTINCT 子句并将其范围限制为一个字段,同时仍选择其他字段?

最佳答案

正如您所发现的,标准 SQL 将 DISTINCT 视为应用于整个选择列表,而不仅仅是一列或几列。这样做的原因是,将什么值放入您从 DISTINCT 中排除的列中是不明确的。出于同样的原因,标准 SQL 不允许您在使用 GROUP BY 的查询中包含不明确的列。

但是 PostgreSQL 有一个非标准的 SQL 扩展来允许你的要求:DISTINCT ON (expr)

SELECT DISTINCT ON (user_id) user_id, created_at 
FROM creations
ORDER BY user_id, created_at
LIMIT 20

您必须在 ORDER BY 子句的最左侧包含不同的表达式。

请参阅 DISTINCT Clause 上的手册获取更多信息。

关于sql - 使用 DISTINCT 子句过滤数据但仍拉取其他非 DISTINCT 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3868140/

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