首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQL GROUP BY时合并

问使用SQL GROUP BY时合并
EN

Stack Overflow用户
提问于 2013-04-19 18:13:46
回答 3查看 63关注 0票数 0

我在mySQL DB中的数据如下所示(但不仅是这4个,我还有很多人多次出现,但具有不同的资格和不同的修改日期

​

​

选择应该是这样的:

代码语言:javascript
复制
SELECT * FROM table where person_id=1 GROUP BY person_id

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

​

​

有没有可能按person id分组,而是说:好的,给我最后修改的资格?通常,where SQL语句中没有person_id。

所以我想要我选择的所有人,但只想要具有最后修改的资格的结果

(我希望我解释得很好,这样你就能理解问题是什么了)

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-19 18:25:09

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

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2013-04-19 18:19:06

如果您想要某个特定人员的最后修改条目,那么只需执行以下操作

代码语言:javascript
复制
select * from table
where person_id = 1
order by modified desc
limit 1
票数 0
EN

Stack Overflow用户

发布于 2013-04-19 18:19:35

编辑

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

试试这个(假设您想要每个人员的最后修改的资格):

代码语言:javascript
复制
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

如果您想要所有人员的上次修改资格:

代码语言:javascript
复制
SELECT
   qualification
FROM
   table
WHERE modified = (
       SELECT 
           MAX(modified)
       FROM
           table  
   )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16102292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档