SQL 第一行 creation_date

SQL first row by creation_date

如果你愿意,我需要一些帮助。 我总是很难从 table.

获得第一行

每个用户可能有多个 order_id,每个 order_id 都有自己的日期。 我需要每个用户只显示他们的第一个 order_id 和日期,有什么建议吗? Table 示例:

User order_id date
Andrew 1242 2021-01-01
Andrew 1252 2021-01-03
Mike 1255 2021-01-04
Andrew 1256 2021-01-04
John 1266 2021-01-04
Andrew 1277 2021-01-06
John 1287 2021-01-06
Johhny 1288 2021-01-06

我需要得到以下信息:

User order_id date
Andrew 1242 2021-01-01
Mike 1255 2021-01-04
John 1266 2021-01-04
Johhny 1288 2021-01-06

这通常使用 Postgres 中的 distinct on () 完成:

select distinct on ("User") *
from the_table
order by "User", "date";

distinct on() returns 只有每列的第一行在括号中传递。 “第一个”由查询的 order by 语句确定。

可以找到更多详细信息in the manual

 SELECT X.USER,X.ORDER_ID,X.DATE FROM 
 (
    SELECT C.USER,C.ORDER_ID,C.DATE,
       ROW_NUMBER()OVER(PARTITION BY C.USER ORDER BY C.date ASC)XCOL
      FROM YOUR_TABLE AS C
 )X WHERE X.XCOL=1

您还可以使用基于 ROW_NUMBER() 的过滤