我有一个表名Data
,字段为
Surmane
,Name
,Timestamp
,PaidMoney
,ChangAmmount
,Address
,Store
我希望查询结果显示每个人的最后一条记录(DESC Timestamp
限制1)(Surname
分组,Name
)PaidMoney
,ChangeAmmount
,Address
,Store
例如,结果必须是
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的每个组合,Name必须显示最后一条记录。
我试着这样做:
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`;
没有正当理由这没有显示正确的数据.....
请帮助......
谢谢...
答案 0 :(得分: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
您的表包含名称和姓氏的冗余数据。 如果将这些数据放在另一个表中并使用人员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))
答案 1 :(得分:0)
您应该在查询中添加order by timestamp DESC
,并将max(...)
部分更改为timestamp
。
答案 2 :(得分:0)
你可以做一个子查询(即一个嵌套的SELECT)来获取每个人的max(日期内容),但是根据这个页面,这不会非常有效,这表明了另一种可能有用的方法: / p>
http://dev.mysql.com/doc/refman/4.1/en/example-maximum-column-group-row.html