带有子集属性的SQL查询过滤器

时间:2016-02-04 07:30:20

标签: python mysql sqlalchemy

我使用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的所有行来执行此操作,然后查找同一用户和日期是否有任何行。这很慢。我正在寻找一种可以在单个查询中完成的更快的替代方案。

2 个答案:

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