2013-02-03 45 views
-1

我有這個表,我想做到以下幾點:沒有集團行「GROUP BY」表達在MySQL

idstep idproject beg_date end_date 
    1  1 
    2  1 
    3  1 
    4  1 
    1  2 
    2  2 
    3  2 
    4  2 
    5  2 
    1  3 
    2  3 
    3  3 

檢索每個項目的最大步驟,而不用使用「GROUP BY」

使用GROUP BY子句中,我得到我想要的是以下結果:

SELECT MAX(idstep), idproject 
    FROM mytable 
GROUP BY idproject; 

結果:

idstep  idproject 
    4   1 
    5   2 
    3   3 

請問,任何人都可以幫我解決這個問題嗎?

+2

我很好奇。如果使用GROUP BY給你你想要的,爲什麼你不想使用它? – mrunion

+3

如果你已經得到了你想要的結果並且有一個很好的簡潔查詢,你爲什麼還想要一個替代方案?聽起來像功課。 – 2013-02-03 05:58:07

+0

沒有GROUP BY的組?使查詢複雜的任何特定原因? –

回答

1

我同意,這使得使用GROUP BY對於這種特殊情況下更有意義,但這應該工作:

SELECT t.project, t.step 
FROM YourTable t 
    LEFT JOIN YourTable t2 on t.step < t2.step and t.project = t2.project 
where t2.step IS NULL 

這裏是Fiddle

您也可以使用NOT EXISTS(感覺我用整個晚上被),但我個人比較喜歡LEFT JOIN/null的方法:

SELECT t.project, t.step 
FROM YourTable t 
WHERE NOT EXISTS (
    SELECT * 
    FROM YourTable t2 
    WHERE t.step < t2.step 
    AND t.project = t2.project 
) 

更多小提琴:http://www.sqlfiddle.com/#!2/ebbc2/1

好運氣。