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() 的过滤
如果你愿意,我需要一些帮助。 我总是很难从 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() 的过滤