为什么此MySql查询导致结果不一致?

时间:2018-08-23 07:17:08

标签: mysql

我有一个名为summary的表,其中包含员工活动的摘要。每周,我都会运行一个流程,为该周内从事销售活动的所有员工创建新的摘要记录。

无论何时创建记录,我都希望将其链接回给给定雇员的最后一个摘要,该记录存在。因此,我通过使用以下查询收集每位员工的最新摘要来开始该过程:

select * from `summary` where id in (select max(id) from summary group by (staff_id))

据我所知,查询并不总是为每个员工返回真正的“ max”,结果我最终得到了指向同一早期记录(而不是其前身)的多个记录。例如,如果某位员工有5条ID为10、20、30、40、50的摘要记录,那么我可能会得到:

  • 10指向NULL(正确)
  • 20点等于10(正确)
  • 30点等于10(不正确)
  • 40指向10(不正确)
  • 50点等于40(正确)

某些员工的记录很好,而且我找不到发生问题的任何模式。 (因为它是一个大型数据库,所以很难诊断,并且一旦运行了该进程,更新就会提交给数据库,因此很难返回到较早的状态。)

摘要数据库中的ID字段是一个自动递增的主键。

1 个答案:

答案 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)

我尝试运行类似的查询,并且该查询在我的环境中也可以正常运行(即使没有别名)