我对如何做到这一点有一个大脑放屁。 我只需要选择一组相同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标识符在约会表中的最新条目。
答案 0 :(得分: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
这里我只是使用上一个查询来获取关节,以便只获得所需的行。
希望这会对你有所帮助。
答案 1 :(得分:0)
George Garchagudashvili接受的答案并不是一个好的答案,因为它group by
中有select
的非聚合列。带有Select *
的{{1}}只是SQL中不应该允许的内容 - 它几乎不在所有数据库中。令人高兴的是,MySQL最新版本的默认版本也拒绝这种语法。
有效的解决方案是:
group by
使用select a.*
from appointment a
where a.app_id = (select max(a2.app_id)
from appointment a2
where a2.lead_id = a.lead_id
);
上的索引,这应该比乔治的查询更快或更快。
答案 2 :(得分:-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