我有一个名为summary
的表,其中包含员工活动的摘要。每周,我都会运行一个流程,为该周内从事销售活动的所有员工创建新的摘要记录。
无论何时创建记录,我都希望将其链接回给给定雇员的最后一个摘要,该记录存在。因此,我通过使用以下查询收集每位员工的最新摘要来开始该过程:
select * from `summary` where id in (select max(id) from summary group by (staff_id))
据我所知,查询并不总是为每个员工返回真正的“ max”,结果我最终得到了指向同一早期记录(而不是其前身)的多个记录。例如,如果某位员工有5条ID为10、20、30、40、50的摘要记录,那么我可能会得到:
某些员工的记录很好,而且我找不到发生问题的任何模式。 (因为它是一个大型数据库,所以很难诊断,并且一旦运行了该进程,更新就会提交给数据库,因此很难返回到较早的状态。)
摘要数据库中的ID字段是一个自动递增的主键。
答案 0 :(得分:0)
尝试使用别名,因为您两次引用同一表摘要,因此ID可能令人困惑
select * from `summary` as s1 where s1.id in (select max(s2.id) from summary as s2 group by s2.staff_id)
我尝试运行类似的查询,并且该查询在我的环境中也可以正常运行(即使没有别名)