· 8 years ago · Aug 25, 2018, 07:06 AM
1Can I select last, first row of GROUP BY query in MySQL?
2Id Name Other_Columns
3-------------------------
41 A A1
52 A A2
63 A A3
74 B B1
85 B B2
96 C C1
107 A A4
118 A A5
12
131 A (A3 - A1)
144 B (B2 - B1)
156 C (C1 - C1)
167 A (A5 - A4)
17
18select min(ID) as FirstId,Name,
19 Concat(max(Other_columns),"-",min(Other_Columns)) as Ans
20from msgtable
21group by Name
22
23SELECT Bottom_one.Id,Bottom_one.Name ,Bottom_one.Other_Columns
24
25FROM `T1` as Top_one
26
27Right JOIN T1 AS Bottom_one
28ON Top_one.Id = Bottom_one.Id - 1
29
30WHERE Top_one.Name IS NULL OR Top_one.Name != Bottom_one.Name
31
32Id Name Other_Columns
331 A A1
344 B B1
356 C C1
367 A A4
37
38SELECT Top_one.Id,Top_one.Name ,Top_one.Other_Columns
39
40FROM `T1` as Top_one
41
42Left JOIN T1 AS Bottom_one
43ON Top_one.Id = Bottom_one.Id - 1
44
45WHERE Bottom_one.Name IS NULL OR Top_one.Name != Bottom_one.Name
46
47Id Name Other_Columns
483 A A3
495 B B2
506 C C1
518 A A5
52
53CREATE TABLE IF NOT EXISTS `T1` (
54 `Id` int(11) NOT NULL auto_increment,
55 `Name` varchar(255) NOT NULL,
56 `Other_Columns` varchar(255) NOT NULL,
57 PRIMARY KEY (`Id`)
58) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
59
60INSERT INTO `T1` (`Id`, `Name`, `Other_Columns`) VALUES
61(1, 'A', 'A1'),
62(2, 'A', 'A2'),
63(3, 'A', 'A3'),
64(4, 'B', 'B1'),
65(5, 'B', 'B2'),
66(6, 'C', 'C1'),
67(7, 'A', 'A4'),
68(8, 'A', 'A5');