【发布时间】:2018-05-10 17:24:54
【问题描述】:
我在 Oracle DB 中有三个表
House (
id
)
Person (
id,
house_id
)
Bill (
id,
date,
amount,
person_id
)
如果个人 id 和上一张账单中的金额存在,我需要获取列表。最后一张账单是日期字段最早的账单。 我可以通过这种方式通过个人 id 获取它:
SELECT
p.id,
b.amount
FROM Person p
LEFT JOIN
(SELECT amount FROM Bill WHERE date =
(SELECT MAX(date) FROM Bill b1 WHERE person_id = 1)
) b ON b.person_id = p.id
WHERE p.id = 1;
我怎样才能获得按房屋 ID 列出的最新账单金额的人员 ID 列表?
样本数据:
House(id:1)
House(id:2)
Person(id:1, house_id:1)
Person(id:2, house_id:1)
Person(id:3, house_id:2)
Bill(id:1, date:01-11-2011, amount:100, person_id:1)
Bill(id:2, date:01-11-2012, amount:200, person_id:1)
Bill(id:3, date:01-11-2011, amount:90, person_id:2)
Bill(id:4, date:01-11-2012, amount:10, person_id:2)
Bill(id:5, date:01-11-2011, amount:190, person_id:3)
house_id = 1 的选择结果:
person_id:1, amount:200
person_id:2, amount:10
【问题讨论】:
-
@GordonLinoff 完成
-
如果您添加了一条记录
Person(id:4, house_id:1)但没有相关账单,您是要显示金额为零或空的人4还是不显示人4? -
您不想在结果中显示日期?
-
@ThorstenKettner 不,只是数量
标签: sql oracle group-by left-join greatest-n-per-group