Doz*_*ent 1 sql sql-server multiple-tables
我有三个包含数据的表,如下所示:
用户
Id Name Other_Columns
---------------------------
1 John Blah
2 Ricky Blah
3 Stella Blah
4 Bob Blah
Run Code Online (Sandbox Code Playgroud)
萨尔多
Id User_id Saldo
--------------------
1 3 0.00
2 1 9.00
3 2 0.15
4 4 3.50
Run Code Online (Sandbox Code Playgroud)
付款
Id User_id Amount Paid_date
------------------------------------------
1 2 10.00 2014-09-01 08:10
2 2 25.00 2014-09-01 09:00
3 3 100.00 2014-05-10 12:47
4 1 20.50 2014-02-23 15:30
Run Code Online (Sandbox Code Playgroud)
如何得到这样的结果:
Id Name Saldo Last Payment
------------------------------------------
1 John 9.00 23.02.2014 20.50
2 Ricky 0.15 01.09.2014 25.00
3 Stella 0.00 0000-00-00 0.00
4 Bob 3.50 10.05.2014 100.00
Run Code Online (Sandbox Code Playgroud)
谢谢你。
select u.id, u.name, s.saldo, p.last_paid_date, p2.amount
from users u
join saldo s
on u.id = s.user_id
join (select user_id, max(paid_date) as last_paid_date
from payments
group by user_id) p
on u.id = p.user_id
join payments p2
on p.last_paid_date = p2.paid_date
and p.user_id = p2.user_id
Run Code Online (Sandbox Code Playgroud)
这个答案假设:
(1) 在表 SALDO 上,每个 USER_ID 有一行
(2)在表PAYMENTS上,每个USER_ID可以有多行
(我对#2 是真的很有信心,我不知道#1,正如你没有说的,你的样本数据并没有表明一种或另一种方式)