查询每个 ID 的单个最旧记录
Querying single oldest record for each ID
假设我有一个包含 foo、bar、creationdate 和 data 列的数据库。
我需要的是一个查询,它查询为 foo 和 bar 的每个唯一组合创建的第一行(即创建日期最低的地方)。
例如,对于以下行:
+-----+-----+--------------+----------------+
| foo | bar | creationdate | data |
+-----+-----+--------------+----------------+
| abc | def | 31.12.2019 | some data |
+-----+-----+--------------+----------------+
| abc | def | 01.05.2020 | other data |
+-----+-----+--------------+----------------+
| ghi | jkl | 04.05.2020 | more data |
+-----+-----+--------------+----------------+
| ghi | jkl | 05.05.2020 | even more data |
+-----+-----+--------------+----------------+
那么期望的输出是:
+-----+-----+--------------+----------------+
| abc | def | 31.12.2019 | some data |
+-----+-----+--------------+----------------+
| ghi | jkl | 04.05.2020 | more data |
+-----+-----+--------------+----------------+
什么 SQL 查询会给我想要的结果?我正在使用 Postgres。
试试下面的方法,你可以使用window函数row_number()
来实现。您可能需要更改 creationDate
格式。这是 demo.
select
foo,
bar,
creationDate
from
(
select
foo,
bar,
creationDate,
row_number() over (partition by foo, bar order by creationDate) as rnk
from yourTable
) val
where rnk = 1
这通常是使用 Postgres
中的专有 distinct on ()
完成的
select distinct on (foo,bar) foo, bar, creationdate, data
from the_table
order by foo,bar,creationdate;
假设我有一个包含 foo、bar、creationdate 和 data 列的数据库。
我需要的是一个查询,它查询为 foo 和 bar 的每个唯一组合创建的第一行(即创建日期最低的地方)。
例如,对于以下行:
+-----+-----+--------------+----------------+
| foo | bar | creationdate | data |
+-----+-----+--------------+----------------+
| abc | def | 31.12.2019 | some data |
+-----+-----+--------------+----------------+
| abc | def | 01.05.2020 | other data |
+-----+-----+--------------+----------------+
| ghi | jkl | 04.05.2020 | more data |
+-----+-----+--------------+----------------+
| ghi | jkl | 05.05.2020 | even more data |
+-----+-----+--------------+----------------+
那么期望的输出是:
+-----+-----+--------------+----------------+
| abc | def | 31.12.2019 | some data |
+-----+-----+--------------+----------------+
| ghi | jkl | 04.05.2020 | more data |
+-----+-----+--------------+----------------+
什么 SQL 查询会给我想要的结果?我正在使用 Postgres。
试试下面的方法,你可以使用window函数row_number()
来实现。您可能需要更改 creationDate
格式。这是 demo.
select
foo,
bar,
creationDate
from
(
select
foo,
bar,
creationDate,
row_number() over (partition by foo, bar order by creationDate) as rnk
from yourTable
) val
where rnk = 1
这通常是使用 Postgres
中的专有distinct on ()
完成的
select distinct on (foo,bar) foo, bar, creationdate, data
from the_table
order by foo,bar,creationdate;