获取数据库中最新添加的记录

时间:2012-02-07 21:19:51

标签: mysql database select-query

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

    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添加的记录。怎么样?

2 个答案:

答案 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-NameUser-Id --> User-Name)。这意味着不会有两个具有不同User-Id s的相等User-Name s。您的数据清楚地显示了User-Id数字2,它们都具有相同的User-Namesami)。

因此,做一个更简单,更有效的查询是有效的:

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)

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