2016-02-04 54 views
0

我使用sqlalchemy來處理mysql數據庫。 我有一個表是這樣的:具有子集屬性的sql查詢過濾器

============================================= 
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

一個簡單連接就足夠了 – Strawberry

回答

0

覈准狀態所有行,但不是最新的給定用戶:

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

你可以試試:

SELECT * FROM MyTable 
inner join 
(SELECT MAX(id) FROM MyTable) as mt 
on mt.id=id where status = 'approved'