MySQL以5分钟为间隔订购块

MySQL以5分钟为间隔订购块,mysql,sql,sorting,datetime,sql-order-by,Mysql,Sql,Sorting,Datetime,Sql Order By,这是我在数据库中的信息: data table status_ord 2019-08-20 15:30:12 tab1 1 2019-08-20 15:30:30 tab2 1 2019-08-20 15:31:31 tab2 2 2019-08-20 15:31:40 tab1 1 2019-08-20 15:31:55 tab1 1 2019-08-20 15:32:12 t

这是我在数据库中的信息:

data                   table    status_ord
2019-08-20 15:30:12    tab1     1
2019-08-20 15:30:30    tab2     1
2019-08-20 15:31:31    tab2     2
2019-08-20 15:31:40    tab1     1
2019-08-20 15:31:55    tab1     1
2019-08-20 15:32:12    tab2     1
2019-08-20 15:32:35    tab2     1
2019-08-20 15:50:45    tab1     1
2019-08-20 15:55:52    tab2     1
2019-08-20 12:30:12    tab1     2
2019-08-20 12:35:35    tab2     2
2019-08-20 12:45:44    tab1     2
我需要先按状态排序,我需要先有所有状态为1的,然后是状态为2的。 然后,我需要每5分钟的间隔,以表排序,一切必须按日期排序

要获得此输出,请执行以下操作:

data                   table    status_ord
2019-08-20 15:30:12    tab1     1
2019-08-20 15:31:40    tab1     1
2019-08-20 15:31:55    tab1     1
-- first 5 minutes block of tab 1
2019-08-20 15:30:30    tab2     1
2019-08-20 15:32:12    tab2     1
2019-08-20 15:32:35    tab2     1
-- first 5 minutes block of tab 2
2019-08-20 15:50:45    tab1     1
2019-08-20 15:55:52    tab2     1
2019-08-20 12:30:12    tab1     2
2019-08-20 12:35:35    tab2     2
2019-08-20 12:45:44    tab1     2
2019-08-20 15:31:31    tab2     2
我只知道如何对状态和日期数据进行排序,如下所示:

SELECT *
FROM Ordine u
ORDER BY u.status_ord ASC, u.data

我希望我是清楚的。谢谢大家!

如果我理解正确,您可以使用整数算法将datetime四舍五入到5分钟的间隔:

SELECT *
     , UNIX_TIMESTAMP(`data`) div (5 * 60) * (5 * 60) AS ts
FROM t
ORDER BY `status_ord`, `ts`, `table`

如果我理解正确,您可以使用整数算法将datetime四舍五入到5分钟的间隔:

SELECT *
     , UNIX_TIMESTAMP(`data`) div (5 * 60) * (5 * 60) AS ts
FROM t
ORDER BY `status_ord`, `ts`, `table`

定义“5分钟”。@草莓举例来说,在第一个,从15.30到15.35,我想先有所有的tab1,然后所有的tab2定义“5分钟”。@草莓举例来说,在第一个,从15.30到15.35,我想先有所有的tab1,然后是所有的tab2是的,我已经想到了这个解决方案,问题是我以前不知道我可以有多少个标签是的,我已经想到了这个解决方案,问题是我以前不知道我可以有多少个标签看起来几乎完美,但是在我的DB上,第二个块不是按数据排序的,这对我来说不是问题,只是问一下为什么-无论如何,有一种方法可以开始计算从第一个选项卡开始的5分钟?@Mattek您可以从每个时间戳中减去第一个时间戳,然后将结果整数除以5x60,再乘以5x60。至于排序,我只是尝试匹配输出,您可能需要按照order by子句重新排列列。对于第一个选项卡,我指的是每个块的第一个,如何计算每个选项卡的第一个,查询将是SELECT*,SUMUNIX_TIMESTADATA-XXXX div 5*60*5*60 As ts FROM t t order by status,ts,“table”看起来几乎完美,但在我的DB上,第二个块不是按数据排序的,这对我来说不是一个问题,只是问一下为什么-无论如何,有一种方法可以开始计算从第一个选项卡开始的5分钟吗?@Mattek您可以从每个时间戳中减去第一个时间戳,然后将结果整数除以5x60,再乘以5x60。至于排序,我只是尝试匹配输出,您可能需要按照order by子句重新排列列。对于第一个选项卡,我是指每个块的第一个,如何计算每个选项卡的第一个,查询将是SELECT*,SUMUNIX_TIMESTADATA-XXXX div 5*60*5*60 As ts FROM t t order by status_ord,ts,`table?