在 Postgres 中自我加入

Posted

技术标签:

【中文标题】在 Postgres 中自我加入【英文标题】:Self Join in Postgres 【发布时间】:2018-12-07 13:39:15 【问题描述】:

我有一个带有 create_time 列的工单表。创建工单时,会在表中插入一行,插入创建时间的 create_time 列。并且当票据关闭时,在表中插入另一行,但现在 create_time 列获取票据的关闭时间。请在查询中帮助我,我可以在其中获得 Ticket_Number,Create_time 作为创建时间,Create_time 作为连续关闭时间。 意味着一张票应该与 2 个 create_time 列一起出现一次。

假设我有以下数据:-

Ticket_Number Create_Time 
123           09-12-2018 
123           10-12-2018

我希望输出为单行。输出意味着工单应该只出现一次,create_time 列应该出现两次,一次是创建日期,另一次是结束日期。

Ticket_Number Create_Time Create_Time 
123           09-12-2018  10-12-2018

【问题讨论】:

【参考方案1】:

我希望关闭时间总是在创建时间之后,因此创建时间是 create_time 列的最小值,而关闭时间是该列的最大值。

所以你需要一个简单的分组查询:

select ticket_number, 
       min(create_time) as create_time, 
       max(create_time) as close_time
from the_table
group by ticket_number;

【讨论】:

以上是关于在 Postgres 中自我加入的主要内容,如果未能解决你的问题,请参考以下文章

Python web 服务来自我的 Postgres DB 的 JSON 提要

将多行加入单行中的多列 Netezza/Postgres

在 Postgres 上加入许多表的解决方案

Postgres 9.x 在重叠日期和时间范围内加入

Postgres加入json数组值

Spark Streaming 加入 GreenPlum/Postgres 数据。方法