sql写法:看着有点复杂,仔细梳理,发现逻辑是极为简单的,如果有什么不懂,请给小编留言,小编尽量给你们解答

间隔是三十分钟的:

SELECT COUNT(DISTINCT tmp.xlh) totalNum, tmp.newTime
  FROM (SELECT T.xlh xlh,
               TO_CHAR(T.zhczsj, 'yyyymmddhh24mi') oldTime,  -- 原来的时间,这个时间主要是要与现在的时间做对比
               CASE
                 WHEN TO_CHAR(T.zhczsj, 'mi') < 30 THEN
                  TO_CHAR(T.zhczsj, 'yyyymmdd') || TO_CHAR(T.zhczsj, 'hh24') || '30'
                 ELSE
                  TO_CHAR(T.zhczsj, 'yyyymmdd') ||
                  to_char(to_number(TO_CHAR(T.zhczsj, 'hh24'))+1) || '00'
               END AS newTime  -- 时间段伪列     
          FROM vio_veh_viorec T
         WHERE T.zhczsj >= trunc(sysdate) and T.zhczsj < trunc(sysdate) + 1
         ORDER BY T.zhczsj ASC) tmp
 GROUP BY tmp.newTime
 ORDER BY tmp.newTime DESC

给出某个时间段,要求以三十分钟为分割,统计出每三十分钟内数据的数量

 

间隔是五分钟的:

SELECT COUNT(DISTINCT tmp.xlh) totalNum, tmp.newTime
  FROM (SELECT T.xlh xlh,
               TO_CHAR(T.zhczsj, 'yyyymmddhh24mi') oldTime,
               -- 原来的时间
               CASE
                 WHEN SUBSTR(TO_CHAR(T.zhczsj, 'mi'), 2, 1) < 5 THEN
                  TO_CHAR(T.zhczsj, 'yyyymmddhh24') ||
                  SUBSTR(TO_CHAR(T.zhczsj, 'mi'), 1, 1) || 0
                 ELSE
                  TO_CHAR(T.zhczsj, 'yyyymmddhh24') ||
                  SUBSTR(TO_CHAR(T.zhczsj, 'mi'), 1, 1) || 5
               END AS newTime -- 时间段伪列     
          FROM vio_veh_viorec T
         WHERE T.zhczsj >= trunc(sysdate) and T.zhczsj < trunc(sysdate) + 1
         ORDER BY T.zhczsj ASC) tmp
 GROUP BY tmp.newTime
 ORDER BY tmp.newTime DESC

 

给出某个时间段,要求以三十分钟为分割,统计出每三十分钟内数据的数量

相关文章:

  • 2021-11-03
  • 2021-07-10
  • 2021-06-21
  • 2021-09-28
  • 2022-12-23
猜你喜欢
  • 2021-08-02
  • 2021-11-20
  • 2022-12-23
  • 2021-11-07
  • 2022-12-23
  • 2021-10-06
  • 2021-06-30
相关资源
相似解决方案