2009-08-12 45 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