我使用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)