2014-02-25 97 views
0

我有一個表像下面:MySQL的 - 如何獲得使用GROUP最後一個記錄BY

id | deptid | last_activities 
1 |  1  | MMD PURCASHING 
2 |  1  | JKO/REPORTING 
3 |  2  | STAND BY CC 
4 |  3  | JKO/REPORTING 

我的查詢:

SELECT id, deptid, last_activities FROM dept_activities GROUP BY deptid ORDER BY id DESC 

而結果如下圖所示:

id | deptid | last_activities 
4 |  3  | JKO/REPORTING 
3 |  2  | STAND BY CC 
1 |  1  | MMD PURCASHING 

在那裏我想要這樣的結果:

id | deptid | last_activities 
4 |  3  | JKO/REPORTING 
3 |  2  | STAND BY CC 
2 |  1  | JKO/REPORTING 

這怎麼可能?如何正確查詢?

+1

你不能直接。用於非分組字段的兩個記錄中的哪一個未定義。您需要使用子查詢。 – Kickstart

+0

我們也可以使用自連接來做到這一點,這會更有效率。 – Deepak

+0

@Deepak - 無法想象使用自連接完成此操作的方式,除非是針對子查詢的自連接。儘管使用GROUP_CONCAT有一個可能的解決方案。 – Kickstart

回答

3

請試試這個:

SELECT * FROM dept_activities AS da1 
JOIN 
(SELECT MAX(id) as max_id FROM dept_activities GROUP BY deptid DESC) AS da2 
ON (da1.id = da2.max_id); 
1

使用子查詢來獲取每個DEPTID最大ID,然後加入,對錶爲您提供了這樣的事情: -

SELECT a.id, a.deptid, a.last_activities 
FROM dept_activities a 
INNER JOIN 
(
    SELECT MAX(id) AS MaxId, deptid 
    FROM dept_activities 
    GROUP BY deptid 
) Sub1 
ON a.deptid = Sub1.deptid 
AND a.id = Sub1.MaxId 
ORDER BY a.id DESC 

另一個可能的解決方案使用GROUP_CONCAT,儘管對此並不熱衷(如果last_activity包含您用於GROUP_CONCAT的分隔符,則會失敗)。

SELECT MAX(id), deptid, SUBSTRING_INDEX(GROUP_CONCAT(last_activities ORDER BY id DESC), ',', 1) 
FROM dept_activities 
GROUP BY a.deptid 
相關問題