2011-09-10 59 views
2

[使用MySQL] 有一個包含數據表的消息如下所示:我可以在MySQL中選擇GROUP BY查詢的最後一行嗎?

Id Name Other_Columns 
------------------------- 
1 A  A1 
2 A  A2 
3 A  A3 
4 B  B1 
5 B  B2 
6 C  C1 
7 A  A4 
8 A  A5 

什麼查詢將返回下面的結果呢?

1 A  (A3 - A1) 
4 B  (B2 - B1) 
6 C  (C1 - C1) 
7 A  (A5 - A4) 
+1

「等欄目」的輸出結果是混亂。你想顯示範圍嗎?減法?還有別的嗎? – Matthew

+0

另外,你想選擇第一個也是最後一個?或第一?還是最後?標題很混亂。 – Matthew

+0

最後和第一個Concat。 – evolonm

回答

0
SELECT Bottom_one.Id,Bottom_one.Name ,Bottom_one.Other_Columns 

FROM `T1` as Top_one 

Right JOIN T1 AS Bottom_one 
ON Top_one.Id = Bottom_one.Id - 1 

WHERE Top_one.Name IS NULL OR Top_one.Name != Bottom_one.Name 

給出了一個緊密結果:

Id Name Other_Columns 
1 A  A1 
4 B  B1 
6 C  C1 
7 A  A4 

這:

SELECT Top_one.Id,Top_one.Name ,Top_one.Other_Columns 

FROM `T1` as Top_one 

Left JOIN T1 AS Bottom_one 
ON Top_one.Id = Bottom_one.Id - 1 

WHERE Bottom_one.Name IS NULL OR Top_one.Name != Bottom_one.Name 

給出Other_Columns其他限制

Id Name Other_Columns 
3 A  A3 
5 B  B2 
6 C  C1 
8 A  A5 

我不知道如何將它們組合成一個SQL語句。 (當然這是微不足道的以編程方式)

這是一個錶轉儲,如果任何人想玩它。

CREATE TABLE IF NOT EXISTS `T1` (
    `Id` int(11) NOT NULL auto_increment, 
    `Name` varchar(255) NOT NULL, 
    `Other_Columns` varchar(255) NOT NULL, 
    PRIMARY KEY (`Id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ; 

INSERT INTO `T1` (`Id`, `Name`, `Other_Columns`) VALUES 
(1, 'A', 'A1'), 
(2, 'A', 'A2'), 
(3, 'A', 'A3'), 
(4, 'B', 'B1'), 
(5, 'B', 'B2'), 
(6, 'C', 'C1'), 
(7, 'A', 'A4'), 
(8, 'A', 'A5'); 

不錯的拼圖!

+0

謝謝,查理。 – evolonm

0

試試這個

select min(ID) as FirstId,Name, 
     Concat(max(Other_columns),"-",min(Other_Columns)) as Ans 
from msgtable 
group by Name 
+1

剛剛看到這個問題。期望的結果有兩個「A」行。 OP需要一個間隙和孤島類型查詢。 –

+0

趕上馬丁。看起來像一個簡單的小組和concat,但是最後一個A使它更加涉及...... – Sparky