我不是MySQL方面的专家,我想知道这是否有可能,或者我是否应该在php中做...
我想按日期时间排序,但按ID组分开
我有这张桌子:
(SELECT created_at, id FROM table ORDER BY created_at)
2018-07-14 23:03:57 a
2018-07-15 01:15:25 a
2018-07-15 03:02:46 a
2018-08-02 06:00:14 b
2018-08-02 06:00:35 b
2018-08-02 06:00:38 b
2018-08-02 06:01:38 c
2018-08-02 06:01:41 c
2018-08-02 06:01:44 c
我需要这样的结果:
2018-07-14 23:03:57 a
2018-08-02 06:00:14 b
2018-08-02 06:01:38 c
2018-07-15 01:15:25 a
2018-08-02 06:00:35 b
2018-08-02 06:01:41 c
2018-07-15 03:02:46 a
2018-08-02 06:00:38 b
2018-08-02 06:01:44 c
我一直在尝试和搜索很久了,如果没有可能,我将找不到只能通过MySQL实现此目标的答案。
谢谢你们!祝你有美好的一天
编辑:我不知道如何在stackoverflow中做一个漂亮的表,对不起:(
答案 0 :(得分:0)
这是可行的,但并不漂亮。工作流程基本上是这样的:
查询看起来像这样(我想...未经测试):
SELECT id, created at
FROM (
SELECT id,
created_at,
@rownum := IF(@prev_id != id, 1, @rownum + 1) AS rownum,
@prev_id := id
FROM table
, (SELECT @rownum := 0, @prev_id := NULL) var_init_subquery
ORDER BY id, created_at
) sq
ORDER BY rownum, created_at, id
不过,在MySQL 8中,可以使用窗口函数来完成此操作。
我想应该这样做:
SELECT id,
created_at,
ROW_NUMBER() OVER (created_at PARTITION BY id) AS rownum
FROM table
ORDER BY rownum, created_at, id
如果不是100%正确的语法,请查阅手册:https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_row-number