SQL获取每个ID的最新记录

时间:2014-09-07 16:38:50

标签: sql sql-server multiple-tables

我有三个包含以下数据的表:

用户

Id   Name     Other_Columns
---------------------------
1    John     Blah
2    Ricky    Blah
3    Stella   Blah
4    Bob      Blah

Saldo

Id   User_id   Saldo
--------------------
1    3         0.00
2    1         9.00
3    2         0.15
4    4         3.50

付款

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

如何得到这样的结果:

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

谢谢。

1 个答案:

答案 0 :(得分:4)

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

这个答案假定:

(1)在表SALDO上,每个USER_ID

有一行

(2)在表PAYMENTS上,每个USER_ID可以有多行

(我非常有信心#2是真的,我不知道#1,因为你没有说,你的样本数据并没有表明这种或那种方式)