2012-10-10 34 views
2

我有如下表:MySQL的:選擇上次從小組,但條件

name  created_for created_on   status 
jen  2012-05-27 2012-02-15 12:14:09 Y 
joe  2012-10-01 2012-02-15 12:22:09 Y 
bob  2012-10-01 2012-02-15 12:47:09 N 
jim  2012-10-01 2012-02-24 12:47:09 N 
jim  2012-10-01 2012-02-29 12:47:09 Y 
sam  2012-10-01 2012-03-11 12:47:09 N 
sam  2012-10-01 2012-03-15 12:47:09 C 
sam  2012-10-01 2012-03-22 12:47:09 Y 
tom  2012-10-01 2012-04-10 12:47:09 N 
tom  2012-10-01 2012-04-11 12:47:09 N 

我想回報是名稱的最後一排,created_on爲每一個有一個2012-2013日期created_for人10-01,但前提是對於最後一個條目的狀態爲N.因此,對於上面的表格,我想回去:

name  created_on 
bob  2012-02-15 12:47:09 
tom  2012-04-11 12:47:09 

狀態的條件是什麼扔我。我似乎無法弄清楚在哪裏放置「where status ='N'」來獲得正確的結果。

+0

查詢? – deadly

回答

2

試試這個:什麼是您目前使用

SELECT t1.* 
FROM 
(
    SELECT name, MAX(created_on) MaxDate 
    FROM YourTableName 
    GROUP BY name 
) t1 INNER JOIN YourTableName t2 on t1.name = t2.name 
            AND t1.MaxDate = t2.created_on 
WHERE t2.created_for = '2012-10-01' 
    AND t2.status = 'N' 
+0

這適用於上面表格的子集,但只要我添加另一行像:'bob 2012-10-04 2012-07-07 12:12:12 N' bob不再返回2012-10-01 @ mahmoud-gamal – Jim

+0

@Jim那是因爲你添加的記錄''bob 2012-10-04 12:12:12 N'' created_for' field ='2012-10-04' not'2012 -10-01'因爲條件'WHERE t2.created_for ='2012-10-01'' –

+0

沒有返回不,再看一次。它不再返回鮑勃2012-10-01。通過我發佈的表子集,它返回所需的2行。但是,如果我在以後的日期爲Bob添加行,則只返回1行。 2012-10-01的bob行不再返回。 – Jim

2
select t.* 
from MyTable t 
inner join (
    select name, max(created_on) max_created_on 
    from MyTable 
    where created_for = '2012-10-01' 
    group by name 
) tm on t.name = tm.name and t.created_on = tm.max_created_on 
where t.status = 'N' 

SQL Fiddle Example

+0

我們有一個贏家!這很好,謝謝! @RedFilter – Jim

+0

@Jim:請考慮接受答案。 –