在 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
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