PostgreSQL DISTINCT ON 具有不同的 ORDER BY

2023-11-27

我想运行这个查询:

SELECT DISTINCT ON (address_id) purchases.address_id, purchases.*
FROM purchases
WHERE purchases.product_id = 1
ORDER BY purchases.purchased_at DESC

但我收到这个错误:

PG::Error: ERROR: SELECT DISTINCT ON 表达式必须与初始 ORDER BY 表达式匹配

Adding address_id作为第一个ORDER BY表达式消除了错误,但我真的不想添加排序address_id。是否可以不订购address_id?


文档说:

DISTINCT ON (表达式 [ ...] ) 仅保留给定表达式计算结果相等的每组行的第一行。 [...] 请注意,除非使用 ORDER BY 来确保所需的行首先出现,否则每组的“第一行”是不可预测的。 [...] DISTINCT ON 表达式必须与最左边的 ORDER BY 表达式匹配。

官方文档

所以你必须添加address_id到顺序。

或者,如果您正在查找包含每个产品最近购买的产品的完整行address_id结果排序依据purchased_at那么你正在尝试解决每组最大 N 的问题,可以通过以下方法解决:

适用于大多数 DBMS 的通用解决方案:

SELECT t1.* FROM purchases t1
JOIN (
    SELECT address_id, max(purchased_at) max_purchased_at
    FROM purchases
    WHERE product_id = 1
    GROUP BY address_id
) t2
ON t1.address_id = t2.address_id AND t1.purchased_at = t2.max_purchased_at
ORDER BY t1.purchased_at DESC

基于@hkf's 答案的更面向 PostgreSQL 的解决方案:

SELECT * FROM (
  SELECT DISTINCT ON (address_id) *
  FROM purchases 
  WHERE product_id = 1
  ORDER BY address_id, purchased_at DESC
) t
ORDER BY purchased_at DESC

问题在这里得到澄清、扩展和解决:选择按某列排序且在另一列上不同的行

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL DISTINCT ON 具有不同的 ORDER BY 的相关文章

  • Sql Server 的夏令时

    我们正在使用一个以 C Unix 格式存储日期的旧应用程序 C 时间基本上是自 1970 年 1 月 1 日以来的秒数 日期以整数形式存储在 SQL Server 数据库中 我正在为使用这些日期的报告编写视图 到目前为止 我正在使用以下命令
  • PostgreSql“运行安装后步骤...数据库集群初始化失败”

    我是一名 Windows 用户 我花了几个小时不断地安装和卸载 然后才使其正常工作 前 10 次左右才看到标题中的错误消息 我将其作为一个自我回答的问题放在这里 以防止其他人在安装时可能遇到同样的问题 并为像我这样第一次使用 Postgre
  • 将图像列保存到 SQL Server 2000 中的文件

    我在 SQL Server 2000 中有一个包含图像列的表 我需要将图像数据保存到文件系统上的文件中 在 SQL Server 2005 中 我可以使用 ADODB Stream 对象进行文件 I O 但这在 SQL Server 200
  • 对于返回超过1个值的SQL select,当Id为GUID时它们如何排序?

    我想知道 SQL Server 如何对查询返回的数据进行排序 并且各个表的 Id 列都是 uniqueidentifier 类型 我在创建所有 GUID 时使用 NHibernate GuidComb 并执行以下操作 Sheet sheet
  • 如何将彼此“接近”的纬度/经度点分组?

    我有一个用户提交的纬度 经度点的数据库 并且正在尝试将 接近 点分组在一起 接近 是相对的 但目前看来约为 500 英尺 起初 我似乎只能按前 3 个小数位具有相同纬度 经度的行进行分组 大约是一个 300x300 的盒子 了解当您远离赤道
  • SQL 选择 n 到 m 关系

    我有一个n to m之间的关系Author and Book 表作者 ID Name 1 Follett 2 Rowling 3 Martin 桌书 ID Title Category 1 A Dance with Dragons Fant
  • 唯一约束与唯一索引?

    之间有区别吗 CREATE TABLE p product no integer name text UNIQUE price numeric and CREATE TABLE p product no integer name text
  • REGEXP_REPLACE - 仅当包含在 () 中时才从字符串中删除逗号

    我在 oracle 论坛网站找到了一个例子 输入字符串 a b c x y z a xx yy zz x WITH t AS SELECT a b c x y z a xx yy zz x col1 FROM dual SELECT t c
  • RANK() OVER PARTITION 并重置 RANK

    如何获得在分区更改时重新启动的 RANK 我有这张表 ID Date Value 1 2015 01 01 1 2 2015 01 02 1
  • 在 SQL 中按键组对行进行顺序编号?

    SQL中有没有办法按顺序添加行号按关键组 假设一个表包含任意 CODE NAME 元组 示例表 CODE NAME A Apple A Angel A Arizona B Bravo C Charlie C Cat D Dog D Dopp
  • MySQL LIKE %string% 不够宽容。我还有什么可以用的吗?

    我有一位客户询问他们的搜索是否可以搜索公司名称 这些名称可以根据用户输入以多种格式进行搜索 例如数据库中存储的公司是 A J R Kelly Ltd 如果用户搜索 一个 J R Kelly 被发现 使用
  • ORA-00933 与内部联接和“as”混淆

    我有一个使用以下命令从两个表中获取数据的查询inner join 但我收到错误SQL command not properly ended as 下面有一个星号 select P carrier id O order id O aircra
  • 如何对多行的一列值求和?

    我有这个表 我想添加几行的 change 列的值 或者更准确地说 从 ne 值为零的行到 ne 值为零的下一行 不是第二个本身 任何答案将不胜感激 rn date ne change 0 2008 12 07 0 10330848398 1
  • SQL UPDATE 语句根据另一个现有行更新列

    基本上我有一个与下表具有相似格式的表格 我想做的是根据这个逻辑更新 Col4 如果 Col2 为空 则用 Col3 更新 Col4 如果 Col2 不为 null 则在 Col1 中查找与 Col2 中的值匹配的值 使用 col3 中的相应
  • Npgsql 参数化查询输出与 PostGIS 不兼容

    我在 Npgsql 命令中有这个参数化查询 UPDATE raw geocoding SET the geom ST Transform ST GeomFromText POINT longitude latitude 4326 3081
  • 如何进行数据透视并计算列平均值

    我承认这是迄今为止我必须面对的最复杂的 SQL 语句之一 我在这件事上碰壁了 我希望有人能帮我一把 我在数据库中有这张表 Item ActiveTime sec DateTime 1 10 2013 06 03 17 34 22 gt Mo
  • 自动提取数据 - Oracle SQL Developer

    我通过 SQL Developer 连接到 Oracle 数据库 我想编写一个返回每月数据集的查询 然后将该数据提取到分隔文本文件中 我知道如何做到这一点就好了 我想知道是否有一种方法可以编写一个脚本来运行查询并在一年内逐月提取数据 这样我
  • 本地 Postgres 实例和 Azure Cloud Postgres 实例之间的实时同步

    我需要在本地 postgresql 实例与云 postgresql 实例之间设置实时同步过程 请让我知道我可以通过哪些选项来实现它 我是否必须使用任何特定工具或者可以通过复制进行管理 请指教 使用 PgPool http www pgpoo
  • postgreSQL 在 WAMP 上的集成

    我刚刚在 Windows 7 上安装了 postgreSQL 我正在尝试将 postgreSQL 与 WAMP 服务器集成 为此 我在 httpd conf 和 php ini 文件中进行了以下更改 1个加载模块c path to libp
  • 根据由另一列分组的不同列的最大值获取值[重复]

    这个问题在这里已经有答案了 我想根据由另一列分组的不同列的最大值来获取列的值 我有这张表 KEY NUM VAL A 1 AB B 1 CD B 2 EF C 2 GH C 3 HI D 1 JK D 3 LM 并想要这样的结果 KEY V

随机推荐

  • 参考 ASP.NET Core MVC Web 应用程序 (RC2) 的完整框架库项目?

    我目前正在使用 ASP NET Core MVC RC2 它应该支持从 Core MVC Web 应用程序项目引用完整的框架库项目 但我似乎无法让它发挥作用 我有一个现有的完整框架库项目 我想将其与新的 Core MVC Web 应用程序项
  • Grails 日期验证的最小约束

    我是 grails 和 groovy 的新手 我有一个带有开始和结束日期的项目域类 我想添加一个约束 指定结束日期需要大于开始日期 然后项目的另一个子对象需要使其开始日期和结束日期与父项目的日期进行验证 这是否可以通过 min 约束实现 或
  • 我的 lambda 参数真的会影响我的本地参数吗?

    我正在处理一些 C 代码 它获取一些数据 并将其转发到传入的函数 void foo int data void fun int fun data 以下内容在没有警告的情况下工作 void bar int data int main int
  • 有没有办法用history.js 来判断状态的走向?

    正如标题所说 我希望能够表演出不一样的作品onstatechange事件如果pushState函数被调用 而不是back功能 或者 如果go函数为负函数或正函数 Example if History pushState or History
  • 如何更改Servlet 3.0 Spring MVC分段上传表单的字符编码?

    我有一个非常简单的 JSP Servlet 3 0 Spring MVC 3 1 应用程序 在我的其中一个页面上 我有多种表格 其中一种表单允许用户上传文件 因此配置为enctype multipart form data 我在 web x
  • 罗盘校准objective-c

    我尝试在我的 ios 应用程序中使用指南针 我有一个问题 如果我实施locationManagerShouldDisplayHeadingCalibration方法和return YES 然后校准显示一直显示 但我应该让它像苹果地图一样 I
  • 注释中的通用类型

    考虑以下代码 import java lang annotation Retention import java lang annotation RetentionPolicy public class AnnotationTest Gen
  • Azure 应用程序网关的自定义域

    我正在尝试使用自定义域名创建应用程序网关 但不断收到错误消息 无法指定域名标签 我想知道我是否做错了什么或者天蓝色应用程序网关不可能拥有自定义域名 以下是我在天蓝色应用程序网关方面学到的经验教训 1 Application gateway
  • Firebase Android 离线性能

    当单个节点下存储大约 5000 个子节点时 在使用离线功能时初始化 firebase 会变得非常慢 执行第一个查询大约需要 30 秒 初始化后 执行后续查询 例如列出前 25 个子节点 只需不到一秒的时间 我正在利用以下属性来启用离线功能
  • Grails 中的多个文件上传

    我正在努力整合优秀的来自 blueimp 的 jquery 文件上传进入 Grails 2 0 并为此编写一个新插件 我知道有已经是插件了 但它不使用资源 并且已经9个月没有更新了 jquery file upload在那段时间发生了很大的
  • 收集器的组合器功能可以用于顺序流吗?

    示例程序 public final class CollectorTest private CollectorTest private static
  • 如何用符号表示用户通过电子邮件发送给我的 Mac OS X 应用程序崩溃报告?

    我正在开发一个应用程序 我已将其发送给一些测试人员 在启动应用程序的短短几分钟内 用户就遇到了崩溃 当弹出窗口说应用程序崩溃时 他复制了详细信息部分中的所有文本并将其通过电子邮件发送给我 我已将文本保存到纯文本文件中 并为其指定了 cras
  • OOP 中的工厂是什么

    我对 工厂相关 设计模式及其 OOP 实现的理解一直非常简单 A 工厂方法 是类内部的方法 该方法具有接口 或抽象类 作为返回类型 并基于某些内部逻辑构造实现该接口的对象 A 工厂 是一个只包含工厂方法的类 An 抽象工厂 是一个仅包含工厂
  • 在 Javascript 中激活链接

    我在使用 Javascript 时遇到一些问题 事实上 我只是该脚本语言的新手 所以我需要一些帮助 问 如何激活此链接 a href box1 something a 该链接只是指向位于index html 文件中的div 的链接 因此没有
  • 使用 2 个索引验证 Codeigniter 中的 UNIQUE 字段

    在 Codeigniter 框架中 我可以使用 表单验证类 验证 MYSQL 数据库中的唯一字段 示例 this gt form validation gt set rules form field form label is unique
  • Hibernate buildSessionFactory() 异常

    我的休眠有一个严重的问题 我遵循了各种书籍和在线教程 但我得到了同样的异常 ExceptionInInitializerError 显然是由 HibernateUtil java 行抛出的 SessionFactory sf cfg con
  • Django - 自定义过滤器检查文件是否存在

    我制作了这个自定义过滤器来检查图像是否存在 from django import template from django core files storage import default storage register templat
  • MySQL 中区分大小写的排序规则

    MySQL 中是否有支持区分大小写的排序规则类型 我在 MySQL 中有所有类型的排序规则 它们的名称末尾都有 ci 因此它们是不区分大小写的排序规则 根据MySQL手册http dev mysql com doc refman 5 0 e
  • 从 windows 转向 *nix 编程平台

    在windows上呆了10多年 如何迁移到 nix平台 哪种口味更容易处理 让我更舒服 然后也许我可以切换到更标准的 nix 口味 我已经推迟了一段时间了 帮我额外的推动 Linux 是最易于访问且具有最成熟的桌面功能的 BSD in it
  • PostgreSQL DISTINCT ON 具有不同的 ORDER BY

    我想运行这个查询 SELECT DISTINCT ON address id purchases address id purchases FROM purchases WHERE purchases product id 1 ORDER