php - 按小时分组,然后正确排序 (22-23-0-1-2 ...)

标签 php mysql sql date datetime

我正在尝试按小时对查询进行分组和排序(24 小时格式)

我想检索过去 12 小时内的所有行,然后按小时分组,然后对它们进行正确排序 (11pm-12pm-1am-2pm = 22-23-1-2)。

我得到了一些结果,但是当切换到中午 12 点(23 点)到凌晨 1 点时遇到问题。见下文 : 查询:

    SELECT Count(*) AS AlertCount,
    HOUR(alert_timeraised) AS AlertHour
    FROM aggregate_alerts 
    WHERE alert_timeraised > DATE_ADD(NOW(), INTERVAL -12 HOUR)
    GROUP BY AlertHour

结果:

AlertCount  AlertHour

"12"    "0"
"15"    "1"
"40"    "2"
"14"    "3"
"52"    "4"
"16"    "5"
"58"    "6"
"23"    "7"
"61"    "8"
"92"    "9"
"96"    "10"
"15"    "11"
"15"    "23"

如您所见,23 是最后一个结果,但我应该是第一个 (23/previousday-1-2-3-4/currentday ...)
如果您有任何想法来处理这个问题...

仅供引用,alert_timeraised 的初始时间戳格式为:

2019-07-23 11:13:46
2019-07-22 23:20:29

非常感谢!

最佳答案

尝试按alert_timeraised 的所有不同部分(年、月、日、小时)进行分组和排序

SELECT Count(*) AS AlertCount,
YEAR(alert_timeraised) as YEAR,
MONTH(alert_timeraised) as MONTH,
DAY(alert_timeraised) as DAY,
HOUR(alert_timeraised) AS AlertHour
FROM 
( 
select   '2019-07-23 11:13:46' as alert_timeraised union all
select   '2019-07-22 23:20:29' as alert_timeraised   
) t

#WHERE alert_timeraised > DATE_ADD(NOW(), INTERVAL -12 HOUR)
GROUP BY 
YEAR(alert_timeraised),
MONTH(alert_timeraised),
DAY(alert_timeraised),
HOUR(alert_timeraised)

order by 
YEAR(alert_timeraised),
MONTH(alert_timeraised),
DAY(alert_timeraised),
HOUR(alert_timeraised)

关于php - 按小时分组,然后正确排序 (22-23-0-1-2 ...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57160855/

相关文章:

php - .htaccess 删除网址中的问号

php - 动态列表不起作用

PHP MySQL 插入

php - 如何通过sql语句获取db中的记录数?

mysql - 优化大型表上的 SQL 查询

javascript - 将动态输入索引到其他动态输入数组

PHP - 获取正则表达式结果的行号

python - 如何在Python Pandas中查询和导出大数据集

sql - 如果找不到记录,SQL查询将返回零计数

sql - 通过 hiveql 添加组 id