SQL 获取每个 ID 的最新记录

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)

谢谢你。

Bri*_*lia 5

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,正如你没有说的,你的样本数据并没有表明一种或另一种方式)