我只能通过例子来描述问题。 如果我有这个数据
use-id user-name add-date
---------------------------------------------------
2 sami 17/1/2011
2 sami 18/1/2011
3 alaa 18/1/2011
4 jamal 19/1/2011
我想为每个用户选择最新的行,我希望得到这些数据:
use-id user-name add-date
---------------------------------------------------
2 sami 18/1/2011
3 alaa 18/1/2011
4 jamal 19/1/2011
对于每个唯一的用户ID我想获得newsest添加的记录。怎么样?
答案 0 :(得分:0)
一种方法是获取每个用户的最新记录的日期:
select `use-id`, max(`add-date`) as `latest`
from <table_name>
group by `use-id`
我们将调用该查询newest_records
,并使用它来仅选择那些具有最新日期的行:
select a.*
from <table_name>
inner join newest_records b
on a.`use-id` = b.`use-id` and a.`add-date` = b.`latest`
编辑:
全部放在一起(复制/粘贴),我们有:
select a.*
from <table_name>
inner join (
select `use-id`, max(`add-date`) as `latest`
from <table_name>
group by `use-id`) b
on a.`use-id` = b.`use-id` and a.`add-date` = b.`latest`
答案 1 :(得分:0)
我认为User-Id
确定User-Name
(User-Id --> User-Name
)。这意味着不会有两个具有不同User-Id
s的相等User-Name
s。您的数据清楚地显示了User-Id
数字2,它们都具有相同的User-Name
(sami
)。
因此,做一个更简单,更有效的查询是有效的:
select user-id, user-name, max(add-date) from table1
group by user-id, user-name
注意:MySql还允许您通过
从组中删除user-name
现在,显然你的表缺少Normalization。你的表应该是这样的:
YourTable(User-Id, Add-Date)
你还应该有另一张表Users
,它应该是这样的:
Users(User-Id, User-Name)
为了获得你期望在这个新模式中得到的结果,你应该加入两个表。