选择不同条目的最新条目

问题描述 投票:1回答:3

我有一个关于如何做到这一点的大脑放屁。我只需要选择一组相同id条目中的最新条目

我在约会表中有记录。

  lead_id   app_id
     4        42
     3        43
     1        44
     2        45
     2        46 (want this one)
     1        48
     3        49 (this one)
     4        50 (this one)
     1        51 (this one)

我需要的结果是app_id 46,49,50,51

仅基于重复的lead_id标识符在约会表中的最新条目。

php mysql
3个回答
-1
投票

我认为这是更加优化和有效的方式(排序下一个分组):

SELECT * FROM (
    SELECT * FROM appointment
    ORDER BY lead_id, app_id DESC 
) AS ord
GROUP BY lead_id 

当您需要表中的所有其他字段而没有复杂的查询时,这将非常有用

结果:

lead_id     app_id
1           51
2           46
3           49
4           50

1
投票

这是您要查找的查询:

SELECT A.lead_id
    ,MAX(A.app_id) AS [last_app_id]
FROM appointment A
GROUP BY A.lead_id

如果您希望每个列都对应于这些预期的行:

SELECT A.*
FROM appointment A
INNER JOIN (SELECT A2.lead_id
                ,MAX(A2.app_id) AS [last_app_id]
            FROM appointment A2
            GROUP BY A2.lead_id) M ON M.lead_id = A.lead_id
                                     AND M.last_app_id = A.app_id
ORDER BY A.lead_id

在这里,我只是使用前面的查询来获得一个关节,以便只获得所需的行。

希望这会帮助你。


0
投票

George Garchagudashvili接受的答案并不是一个好的答案,因为它在group by中有select和非聚合列。使用Select *group by只是SQL中不应该允许的东西 - 它几乎不在所有数据库中。令人高兴的是,更新版本的MySQL的默认版本也拒绝这种语法。

有效的解决方案是:

select a.*
from appointment a
where a.app_id = (select max(a2.app_id)
                  from appointment a2
                  where a2.lead_id = a.lead_id
                 );

使用appointment(lead_id, app_id)的索引,这应该比George的查询快或快。

© www.soinside.com 2019 - 2024. All rights reserved.