假设表A的结构如下:
奖金类型 | 日期 | 奖金金额 |
---|---|---|
A | 2021-01-01 | 100 |
A | 2021-02-01 | 200 |
B | 2021-01-01 | 150 |
B | 2021-02-01 | 250 |
表B的结构如下:
奖金类型 | 其他字段1 | 其他字段2 |
---|---|---|
A | value1 | value2 |
B | value3 | value4 |
我们可以使用窗口函数来实现按照表B的一个字段(奖金类型)分组,获取表A中每个奖金类型的最后一条记录的方法。
SELECT *
FROM (
SELECT A.*, ROW_NUMBER() OVER (PARTITION BY A.奖金类型 ORDER BY A.日期 DESC) AS rn
FROM 表A AS A
INNER JOIN 表B AS B ON A.奖金类型 = B.奖金类型
) AS C
WHERE C.rn = 1
以上代码首先将表A按照奖金类型和日期进行降序排序,并使用窗口函数ROW_NUMBER()为每个奖金类型分配一个行号。然后,在外部查询中,我们只选择行号为1的记录,即每个奖金类型的最后一条记录。
执行以上代码后,将得到以下结果:
奖金类型 | 日期 | 奖金金额 |
---|---|---|
A | 2021-02-01 | 200 |
B | 2021-02-01 | 250 |