SQL查询语句修正请求:原Microsoft SQL Server兼容语句在XAMPP服务器MariaDB中运行报错
适配MariaDB的修正SQL语句
没问题,我帮你把这条SQL调整成MariaDB能正常运行的版本,先拆解下原语句在MariaDB里的几个不兼容点,再给你最终的代码:
原语句的不兼容问题
- SQL Server的
TOP (2)语法,MariaDB用LIMIT来限制返回行数 DATEPART(HOUR, ...)在MariaDB里可以用更简洁的内置函数HOUR()替代CONVERT(date, ...)提取日期的写法,MariaDB推荐用DATE()函数,更直观高效- SQL Server的
GETDATE()对应MariaDB的CURDATE()(仅返回日期,适合这里的当日匹配场景)
修正后的MariaDB版本
SELECT HOUR(t.callerDateTime) as Hour, COUNT(cli) as Count FROM ivrtimeout t WHERE DATE(t.callerDateTime) = CURDATE() GROUP BY HOUR(t.callerDateTime) ORDER BY HOUR(t.callerDateTime) DESC LIMIT 2;
额外性能优化提示
如果你的callerDateTime字段创建了索引,用DATE(t.callerDateTime)会导致索引失效,这时可以改成范围查询来提升效率:
SELECT HOUR(t.callerDateTime) as Hour, COUNT(cli) as Count FROM ivrtimeout t WHERE t.callerDateTime >= CURDATE() AND t.callerDateTime < CURDATE() + INTERVAL 1 DAY GROUP BY HOUR(t.callerDateTime) ORDER BY HOUR(t.callerDateTime) DESC LIMIT 2;
这种写法能利用字段上的索引,查询速度会更快。另外,如果要统计所有行(包括cli为NULL的记录),可以把COUNT(cli)改成COUNT(*)。
内容的提问来源于stack exchange,提问作者Muzammal arshad
相关产品推荐
相关产品推荐

