我使用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)。
我只能通过首先过滤status = approved的所有行来执行此操作,然后查找同一用户和日期是否有任何行。这很慢。我正在寻找一种可以在单个查询中完成的更快的替代方案。
答案 0 :(得分:0)
所有行都处于已批准状态但不是给定用户的最新行:
SELECT * FROM MyTable outer
WHERE status = 'approved'
AND id <> (SELECT MAX(id) FROM MyTable inner WHERE inner.user_name = outer.user_name)
答案 1 :(得分:0)
您可以尝试:
SELECT * FROM MyTable
inner join
(SELECT MAX(id) FROM MyTable) as mt
on mt.id=id where status = 'approved'