我有一个充满数据的表,如下所示:
ID datetime ip_address marker
289055 2016-11-17 17:54:51 XX.XXX.XXX.XXX End
289037 2016-11-17 17:54:51 XX.XXX.XXX.XXX Start
289057 2016-11-17 17:58:56 XX.XXX.XXX.XXX Start
289123 2016-11-17 17:59:18 XX.XXX.XXX.XXX End
289184 2016-11-17 18:05:55 XX.XXX.XXX.XXX End
289125 2016-11-17 18:05:55 XX.XXX.XXX.XXX Start
289186 2016-11-17 18:12:22 XX.XXX.XXX.XXX Start
289292 2016-11-17 18:18:44 XX.XXX.XXX.XXX End
我试图按两个值(“开始”、“结束”)对数据进行排序,但“带状”。我的意思如下:
ID datetime ip_address marker
289037 2016-11-17 17:54:51 XX.XXX.XXX.XXX Start
289055 2016-11-17 17:54:51 XX.XXX.XXX.XXX End
289057 2016-11-17 17:58:56 XX.XXX.XXX.XXX Start
289123 2016-11-17 17:59:18 XX.XXX.XXX.XXX End
289125 2016-11-17 18:05:55 XX.XXX.XXX.XXX Start
289184 2016-11-17 18:05:55 XX.XXX.XXX.XXX End
289186 2016-11-17 18:12:22 XX.XXX.XXX.XXX Start
289292 2016-11-17 18:18:44 XX.XXX.XXX.XXX End
请注意 marker
列如何在 Start 和 End 之间旋转(start 始终为第一个,End 始终为最后一个)。我相信我想要完成的事情是可能的,但我不知道如何将这些数据操纵成我想要的。我尝试了一些不同的查询,按不同的列进行分组或排序,但它总是以第一个表的形式结束,或者以“Start”作为标记
的所有记录分组在一起,后跟“End” .
最佳答案
在 MySQL 8+ 中,这很简单:
order by row_number() over (partition by marker order by datetime),
marker desc
这在早期版本的 MySQL 中更具挑战性。
关于MySQL 按两个交替的静态值对记录进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55497520/