在 2 个条件下连接表导致创建重复列。如果我尝试 SELECT 该列,我会收到“'Invalid Identifier'”错误

Joining tables on 2 conditions caused the creation of a duplicate column. If I try to SELECT that column I get an ''Invalid Identifier'' error

Table: A

| ID  | Name    | 
| --  | ------- |
| 1   | John    |
| 2   | Micheal |
| 3   | Mary    |

Table乙:

| ID  | Date     | Bonus |
| --  | -------- | ----- |
| 1   | 01/01/09 | 1200  |
| 1   | 01/07/12 | 4000  |
| 1   | 12/05/14 | 2500  |
| 3   | 01/01/09 | 0     |
| 3   | 11/10/17 | 1850  |
| 2   | 08/01/16 | 2500  |
| ... |    ...   |  ...  |

我有这两张桌子。我的目标是编写一个查询来检索姓名、该人可用的最新日期以及与该日期和该姓名对应的奖金。

这是我的代码,

SELECT NAME, date_max, BONUS FROM 
((SELECT A.ID, MAX(A.DATE) as date_max FROM 
table_A A JOIN table_B B 
USING (ID) 
GROUP BY ID) C 
JOIN table_B D 
ON (C.ID = D.ID AND date_max = D.DATE))

问题是,通过加入两个条件(最后一行),我在内部查询的结果中复制了 ID 列,现在当我尝试执行外部 SELECT 时,我得到了无效标识符错误.请帮我解决这个问题

使用纯 sql,一种方法是这样的:

select ta.name, tb.Date, tb.Bonus
from TableA ta
  left join TableB tb
      on ta.ID = tb.ID
  left join (
    select ID, max(b.Date) as Date
    from TableA a
      join TableB b
        on a.ID = b.ID
      group by ID
    ) m
  on ta.ID = m.ID
 and tb.date = m.date   

或投票最多的答案: Fetch the row which has the Max value for a column

使用window函数,另一种方法是:

 select t.name, t.Date, t.Bonus,
 from (
   select ta.name, tb.Date, tb.Bonus,
     max(tb.Date) over (partition by ta.ID) as maxDate
   from TableA ta
     left join TableB tb
       on ta.ID = tb.ID
     ) t
 where t.maxDate = t.Date