MySQL 以 5 分钟为间隔订购 block

标签 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    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

我需要首先按 status_ord 排序,我需要首先拥有所有状态 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

我希望我说得清楚。谢谢!

最佳答案

如果我理解正确,您可以使用整数算术将日期时间舍入为 5 分钟间隔:

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

Demo on db<>fiddle

关于MySQL 以 5 分钟为间隔订购 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57573281/

相关文章:

javascript - 调用退出错误后无法将查询排入队列

mysql - 从数据库中的多行中删除前 17 个字符

sql - 如何通过 id 以外的任何其他方式获取记录 - SugarCRM

mysql - SQL中分组行的平均值

python - 使用一列对值进行分组,并使用 pandas 数据框返回另一列中具有最大值的值

Mysql 选择多个 id

Php Mysql 存储过程 IN OUT

MySQL 连接并选择随机字段

python - 根据多个谓词对字符串列表进行排序

iphone - Objective C - 将对象数组(带有日期字段)转换为数组字典(按星期几键控)