2011-09-10 9 views
2

以下に示すように、データを含むテーブルのメッセージがあり [MySQLを使用する]:MySQLでGROUP BYクエリの最後の1行目を選択できますか?

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 
内の他の制限を与えます10

私は1つの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

ああ、ちょうどこの問題を見た。所望の結果は2つの「A」行を有する。 OPには、ギャップと島型クエリが必要です。 –

+0

良いキャッチマーティン。単純なグループとコンカットのように見えましたが、最後のAはもう少し複雑になっています... – Sparky

関連する問題