最近寫了條SQL,沒注意踩坑了,丟臉了……
SQL要求: 分組後查詢組內最新的一條記錄,公司用的是MySQL,Oracle我就先不說了。不多說了,直接上SQL,這裏附上一個在線格式化SQL的地址,比Navicat裏面的美化SQL要好些,語句緊湊些
點我 => * 在線代碼格式化 * <= 點我
SELECT t.holder_entity_id, t.tenant_id, MAX(t.maintain_time) AS maintain_time, t.maintain_user_id
, t.maintain_content, t.valid_flag, t.update_time
FROM t_tool_holder_maintain t
GROUP BY t.holder_entity_id
結果如下:
查了表的數據發現時間對不上。
我只看了時間以爲是最新的記錄,後來發現只有時間是最新的,那條記錄不是,坑了坑了
那就是我SQL出問題了,修改成子查詢語句如下:
SELECT *
FROM (
SELECT t.holder_entity_id, t.tenant_id, t.maintain_time, t.maintain_user_id, t.maintain_content
, t.valid_flag, t.update_time
FROM t_tool_holder_maintain t
ORDER BY maintain_time DESC
LIMIT 999
) tt
GROUP BY holder_entity_id
結果如下:
發現沒,aaa那條記錄沒了,id相同的去掉了,OK,說明這是可行的!那麼有其他更高效正確的寫法嗎?歡迎老鐵們探討交流