0

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

我在我的数据库中的数据

选择将类似于:

SELECT * FROM table where person_id=1 GROUP BY person_id

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

我选择一组后的结果

有没有可能按人员ID分组,但要说:好的,给我最后修改的资格?通常我没有person_idwhere SQL 语句。
所以我想要我选择的所有人,但只有最后修改的资格的结果
(我希望我解释得很好,这样你就明白问题是什么了)

(我的选择当然比我展示的要复杂得多,这只是为了向您展示我在做什么)

4

3 回答 3

3

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

select t1.id, 
  t1.person_id,
  t1.name,
  t1.qualification,
  t1.created,
  t1.modified,
  t1.version
from yourtable t1
inner join
(
  select person_id, max(modified) MaxMod
  from yourtable
  group by person_id
) t2
  on t1.person_id = t2.person_d
  and t1.modified = t2.maxmod
于 2013-04-19T10:25:08.660 回答
0

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

select * from table
where person_id = 1
order by modified desc
limit 1
于 2013-04-19T10:19:05.560 回答
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  
   )
于 2013-04-19T10:19:34.560 回答