我有如下数据..这只是一个示例数据,但每年有超过 1000 万条记录,我们可以一次性将其插入到下表中的另一个表中
Id name date
1 a 2018-01-01
2 b 2018-02-01
3 a 2018-6-01
4 a 2018-07-01
5 a 2018-10-01
6 a 2019-01-01
7 b 2019-02-01
8 a 2019-6-01
9 a 2019-07-01
10 a 2019-10-01
11 a 2020-01-01
12 b 2020-02-01
13 a 2020-6-01
14 a 2020-07-01
15 a 2020-10-01
尝试了很多方法,因为数据很大,我们只需要这些年来的 3 条最新记录,而太大的数据无法使用 SQL 查询。 预期输出:
Id name date
15 a 2020-10-01
14 a 2020-07-01
13 a 2020-6-01
7 b 2019-02-01
2 b 2018-02-01
这是一个应该在大多数 SQL 兼容数据库的最新版本中运行的查询。
select
Id
, name
, "date"
from (
select
Id
, name
, "date"
, row_number() over(partition by name order by "date" DESC) as row_num
from your_table
) d
where row_num = 1
如果
row_number()
不可用,请告知使用哪种数据库类型和版本。
nb“date”是某些 SQL 实现中的保留字,因此您可能需要引用该列名以确保安全。