使用SQL GROUP BY时合并

时间:2013-04-19 10:13:46

标签: mysql group-by sql-merge

我的mySQL数据库中的数据看起来像这样(但不仅仅是这4个,我有很多人出现的时间超过一次,但具有不同的资格和不同的修改日期

the data i have in my database

选择类似于:

SELECT * FROM table where person_id=1 GROUP BY person_id

所以,如果我做出这个选择并且我按person_id分组,我会得到这样的结果:

my result after selection an group by

是否有可能按人员ID分组,但要说:好的,给我最后修改的资格?通常我在SQL语句中没有person_id 所以我希望所有人都从我的选择,但只有最后修改资格的结果
(我希望我能很好地解释它,所以你明白问题是什么)

(我的选择当然比我展示的那个复杂得多,这只是为了向你展示我正在做的事情)

3 个答案:

答案 0 :(得分:3)

您还可以使用子查询返回每个max的{​​{1}}修改日期,然后将该结果加入到您的表中以获取具有最大日期的行:

person_id

答案 1 :(得分:0)

如果您想要特定人员的最后修改条目,那么只需执行

select * from table
where person_id = 1
order by modified desc
limit 1

答案 2 :(得分:0)

修改

我误解了这个问题,我会更新答案

尝试此操作(假设您希望每个人员的最后修改资格):

SELECT 
   person_id,
   qualification
FROM 
   table as a
INNER JOIN (
   SELECT 
     person_id,
     MAX(modified) as za_date
   FROM 
     table
   GROUP BY 
     person_id
) as tmp 
  ON a.person_id = tmp.person_id
  AND a.modified = tmp.za_date

如果您想要所有人员的最后修改资格:

SELECT
   qualification
FROM
   table
WHERE modified = (
       SELECT 
           MAX(modified)
       FROM
           table  
   )