1

我只能通过例子来描述这个问题。如果我有这个数据

    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,我想获得最新添加的记录。如何 ?

4

2 回答 2

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`
于 2012-02-07T21:26:34.707 回答
0

正如我所见,它User-Id决定了User-NameUser-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)

为了在这个新模式中获得您期望的结果,您应该加入两个表。

于 2012-02-07T22:03:32.420 回答