
地 址:北京市平谷区66号
电 话:18969242624
网址:dsesh.com
邮 箱:8993717@qq.com
这篇文章主要(yao)介绍了MySQL按小时(shi)查询数据,查询没有的补0,本文通过实例代码给大家介绍的非常详细,对大家的数据学习或工作具有一定的参考借鉴价值(zhi),需要的查询朋友可以参考下
需(xu)求背景


思路 直接使用group by查询要统(tong)计的查询表(biao),当某个小时(shi)统计数为0时,数(shu)据会没有该小时分组(zu)。查询思考了一下,数据需要建立辅助表,查询只有一列小时,数据再插入0-23共24个小时

CREATE TABLE hours_list (
hour int NOT NULL PRIMARY KEY
)
先查小时表,查询再做连接(jie)需要查的数据(ju)表,即可将没(mei)有统计数(shu)的查询小时填充上0。这里由于需要(yao)查多个表中,create_time在每个小时(shi)区间内、且SOURCE_ID等于查询条件的统计之和(he),所以UNION ALL了多(duo)张表
SELECT
t.HOUR,
sum(t.HOUR_COUNT) hourCount
FROM
(SELECT
hs. HOUR AS HOUR,
COUNT(cs.RECORD_ID) AS HOUR_COUNT
FROM
cbc_hours_list hs
LEFT JOIN cbc_source_0002 cs ON HOUR (cs.create_time) = hs. HOUR
AND cs.create_time > #{ startTime}
AND cs.create_time <= #{ endTime}
<#if sourceId?exists && sourceId !=''>
AND SOURCE_ID = #{ sourceId}
</#if>
GROUP BY
hs. HOUR
UNION ALL
SELECT
hs.HOUR AS HOUR,
COUNT(cs.RECORD_ID) AS HOUR_COUNT
FROM
cbc_hours_list hs
LEFT JOIN cbc_source_hs cs ON HOUR (cs.create_time) = hs. HOUR
AND cs.create_time > #{ startTime}
AND cs.create_time <= #{ endTime}
<#if sourceId?exists && sourceId !=''>
AND SOURCE_ID = #{ sourceId}
</#if>
GROUP BY
hs. HOUR
UNION ALL
SELECT
hs.HOUR AS HOUR,
COUNT(cs.RECORD_ID) AS HOUR_COUNT
FROM
cbc_hours_list hs
LEFT JOIN cbc_source_kfyj cs ON HOUR (cs.create_time) = hs. HOUR
AND cs.create_time > #{ startTime}
AND cs.create_time <= #{ endTime}
<#if sourceId?exists && sourceId !=''>
AND SOURCE_ID = #{ sourceId}
</#if>
GROUP BY
hs. HOUR
UNION ALL
SELECT
hs.HOUR AS HOUR,
COUNT(cs.RECORD_ID) AS HOUR_COUNT
FROM
cbc_hours_list hs
LEFT JOIN cbc_source_his_0002 cs ON HOUR (cs.create_time) = hs. HOUR
AND cs.create_time > #{ startTime}
AND cs.create_time <= #{ endTime}
<#if sourceId?exists && sourceId !=''>
AND SOURCE_ID = #{ sourceId}
</#if>
GROUP BY
hs. HOUR
UNION ALL
SELECT
hs.HOUR AS HOUR,
COUNT(cs.RECORD_ID) AS HOUR_COUNT
FROM
cbc_hours_list hs
LEFT JOIN cbc_source_his_hs cs ON HOUR (cs.create_time) = hs. HOUR
AND cs.create_time > #{ startTime}
AND cs.create_time <= #{ endTime}
<#if sourceId?exists && sourceId !=''>
AND SOURCE_ID = #{ sourceId}
</#if>
GROUP BY
hs. HOUR
UNION ALL
SELECT
hs.HOUR AS HOUR,
COUNT(cs.RECORD_ID) AS HOUR_COUNT
FROM
cbc_hours_list hs
LEFT JOIN cbc_source_his_kfyj cs ON HOUR (cs.create_time) = hs. HOUR
AND cs.create_time > #{ startTime}
AND cs.create_time <= #{ endTime}
<#if sourceId?exists && sourceId !=''>
AND SOURCE_ID = #{ sourceId}
</#if>
GROUP BY
hs. HOUR) t
GROUP BY
t.hour
效果
统计数为0的小时也可以查出来了。
到此这篇关于MySQL按小时查询数据,没有的补0的文章就介绍到这了,更多相关MySQL按小时查询数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文(wen)章希望大家以后多多支持脚本之家!
来源:脚本之家
链接:https://www.jb51.net/article/202439.htm