我使用sqlalchemy在mysql数据库上工作。
我有一张桌子,像这样:

=============================================
id  user_name   time  status         content2
=============================================
1   a           1      approved      x
2   a           2      open          y
3   b           1      rejected      g
4   b           3      open          h


我想找出所有处于批准状态但不是给定用户最新的行。例如,id = 1的行处于批准状态,但是存在来自同一用户的后续报告。我想过滤诸如(1)这样的行。

我只能通过首先过滤状态为已批准的所有行,然后查找是否有相同用户的行以及以后的日期来执行此操作。这很慢。我正在寻找可以在单个查询中完成的更快的替代方法。

最佳答案

所有行处于已批准状态,但不是给定用户的最新行:

SELECT * FROM MyTable outer
WHERE status = 'approved'
AND id <> (SELECT MAX(id) FROM MyTable inner WHERE inner.user_name = outer.user_name)

10-05 21:06
查看更多