2011-04-08 69 views
1

我有一個字段的表名Data
SurmaneNameTimestampPaidMoneyChangAmmountAddressStore如何檢索mysql中的最後一條記錄?

我想有作爲查詢的最後一條記錄的結果(DESC Timestamp限制1)每個人的(由Surname基,Name)與PaidMoneyChangeAmmountAddressStore

例如其結果必然是

Jones, Jim, 1290596796, 220.00, 0.25, 5th Avenue 120, Some Store1 
Kojak, Ian, 1290596890, 1000.00, 50.25, Derek Avenue 1020, Some Store2 

對於Surname的每個組合,名稱必須出現最後一條記錄。

我試着這樣做:

select `Surname`, 
     `Name`, 
     max(date_format(from_unixtime(`Timestamp`),'%Y/%m/%d - %T')) AS `dateTime`, 
     `PaidMoney`, 
     `ChangAmmount`, 
     `Address`, 
     `Store` 
from `Data` 
group by `Surname`, `Name`; 

沒有正當理由,這並不表明正確的數據.....

請幫助...

謝謝。 。

回答

1
select t1.surname, 
     t1.name, 
     from_unixtime(t1.timestamp,'%Y/%m/%d - %T') as datetime, 
     t1.PaidMoney, 
     t1.ChangAmmount, 
     t1.Address, 
     t1.Store 
from table as t1 
inner join (select concat_ws(' ',name,surname) as n,max(timestamp) as timestamp 
     from table 
     group by name,surname) as t2 
on t1.timestamp = t2.timestamp and concat_ws(' ',t1.name,surname) = t2.n 

你的表包含名字和姓氏的冗餘DATAS。 如果將這些數據放在另一個表中並使用人員ID引用它們會更好。 此外,如果沒有id,則即使您有索引,concat的使用也會降低聯接性能。

編輯。

create view my_view as 
select * from table t1 
where timestamp = (select max(timestamp) from table as t2 
        where concat_ws(' ',t1.name,t1.surname) = concat_ws(' ',t2.name,t2.surname))  
+0

非常感謝你..... !!!我現在的第二個問題是我無法制作這個視圖....我收到消息「視圖的SELECT包含FROM子句中的一個子查詢」.... – 2011-04-08 14:47:58

+0

我已經更新了我的答案,以便您可以使用視圖:) – 2011-04-08 15:18:44

+0

謝謝先生! – 2011-04-08 15:23:45

0

您應該將order by timestamp DESC添加到您的查詢並將max(...)部分更改爲timestamp

+0

這是如何確保包含正確的商店和付款? – Martijn 2011-04-08 12:12:10

相關問題