2009-08-12 41 views
1

我想从行中获取卡号的剩余/最新余额。以下是表格的示例。如何连续获得最新的物品?

trans_id |  cardnumber |  trans_date  | balance 
--------------------------------------------------------------- 
1   | 1000005240000008 | 2009-07-03 04:54:27 |  88 
2   | 1000005120000008 | 2009-07-04 05:00:07 |  2 
3   | 1000005110000008 | 2009-07-05 13:18:39 |  3 
4   | 1000005110000008 | 2009-07-06 13:18:39 |  4 
5   | 1000005110000008 | 2009-07-07 14:25:32 |  4.5 
6   | 1000005120000002 | 2009-07-08 16:50:51 |  -1 
7   | 1000005240000002 | 2009-07-09 17:03:17 |  1 

结果应该是这样的:

trans_id |  cardnumber |  trans_date  | balance 
--------------------------------------------------------------- 
1   | 1000005110000008 | 2009-07-07 14:25:32 |  4.5 
2   | 1000005120000002 | 2009-07-08 16:50:51 |  -1 
3   | 1000005240000002 | 2009-07-09 17:03:17 |  1 

我已经有一个查询,但它是这样的:

SELECT cardnumber, MAX(balance), trans_date 
FROM transactions 
GROUP BY cardnumber 

我真的需要这样的帮助,有即时消息一困难时期。 。:( 在此先感谢

马克

回答

2

我没有一个MySQL在此刻我的面前,但是这样的事情应该工作:

SELECT latest.cardnumber, latest.max_trans_date, t2.balance 
    FROM 
    (
     SELECT t1.cardnumber, MAX(t1.trans_date) AS max_trans_date 
     FROM transactions t1 
     GROUP BY t1.cardnumber 
    ) latest 
    JOIN transactions t2 ON (
     latest.cardnumber = t2.cardnumber AND 
     latest.max_trans_date = t2.trans_date 
    ) 

大概需要5.0.x版或更高版本可能有更好的方法,这是3AM:-D

+1

感谢队友,对我完美的作品。生病尝试为此缩短代码。顺便说一句,它的3PM在这里! :P – Marky 2009-08-12 07:13:08

0

几乎与derobert的相同,但其他方式。想法是无论如何,你做一个子查询,采用最新的(最大)交易cardnumber日期,然后加入orig inal表。这当然假设在同一时间卡号上没有任何交易。

SELECT t1.trans_id, t1.cardnumber, t1.trans_date, t1.balance 
FROM transaction AS t1 
JOIN (SELECT MAX(trans_date), cardnumber FROM transactions) AS t2 ON t2.cardnumber = t1.cardnumber 
0

SELECT * FROM交易WHERE(cardnumber,TRANS_DATE)在(SELECT cardnumber,MAX(TRANS_DATE)FROM交易GROUP BY cardnumber);

+0

它给出了和我第一次查询相同的结果。 选择cardnumber,MAX(余额),trans_date从交易GROUP BY cardnumber 感谢您的帮助,虽然,队友。 :P – Marky 2009-08-12 07:23:02