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

标签 sql ruby-on-rails postgresql distinct

我正在尝试在 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/

相关文章:

sql - 加快 Sql Server 中按分钟划分日期间隔的速度

ruby-on-rails - 有没有办法收集if?

postgresql - pg_dump : how to install on Amazon Linux for PostgreSQL 9. 5.2?

java - 使用 hibernate 标准查询 CLOB 列

sql - 如何使用 csv 格式的 where 子句执行 SQL select 语句?

sql - 从 SQL 中剥离文字值以正确识别数据库工作负载的最佳方法是什么?

ruby-on-rails - 设备中未定义的局部变量或方法 `resource_class'

ruby-on-rails - ruby rails : undefined method 'digest' Rails Tutorial Section 10. 1.1

postgresql - 如何在 golang 中使用 .Format 将 time.Time 对象转换为格式化字符串?

postgresql - 如何将 Postgres ltree 加入标签表?