繁体   English   中英

在15分钟的时间间隔内串联max_times SQL

[英]Concatenation of max_times within 15 minute time intervals SQL

我正在尝试编写一个SQL查询,该查询提取一个ID并在从第一次开始的15分钟时间间隔内连接最大时间。

即对于一个log_id数据可能是

101 01:01 
101 01:08 
101 01:23 
101 02:01 
101 02:10 
101 02:16

我们想展示

101 01:01, 01:08, 01:23, 2:01, 2:16

有任何想法吗?

这是我们正在使用的起始查询:

select
ol.log_id,
ifm.meas_value,
ifm.measure_id,
ifm.recorded_time
from meas ifm
inner join rec ifr on ifm.fsd_id = ifr.fsd_id
inner join  pe on ifr.data_id = pe.data_id
inner join record_summary f on pe.n_id = f.n_id
inner join pe2 on pe.t_id = pe2.t_id and pe.date = pe2.date and pe2.type = 51
inner join log l on pe2.ata_id = l.data_id and l.date = pe2.date
where ifm.measure_id in ('891')
and ol.date >= trunc(sysdate - 3)

对于每个log_id,将有多个记录的时间是我们要拉的第一次时间,以及每15分钟间隔直到最后一次的最长时间。 这些时间将被串联到一个列表中。

我们尝试了使用所有值的listagg,但次数太多了,因此最终用户希望每15分钟仅看到一个值。

基本上,您有3个问题合而为一:

  1. 如何将日期字段四舍五入到15分钟? https://community.oracle.com/thread/1042863

    ceil(to_number(to_char(test_timestamp,'yyyymmddhh24mi'))/ 15)* 15

  2. 如何从组中获取行?

这是一个非常受欢迎的问题,您会在这里找到一些东西: https : //stackoverflow.com/questions/tagged/oracle+greatest-n-per-group?sort=votes&pageSize=30

  1. 如何汇总字符串值以在组内进行串联:

    LISTAGG(convertedTimeField,'')

尝试将所有三个部分组合在一个查询中以获得所需的结果。

为了简化下表的使用:

CREATE TABLE Test ( id NUMBER, log DATE );

(注意:oracle中的DATE实际上是dateTime。使用||进行字符串连接。)

您的给定列表似乎表明,当最大值和最小值相同时,您只显示一次,这可以通过分组两次来完成:

SELECT
   O.id,
   O.logDate,
   LISTAGG(O.logTimes, ', ') WITHIN GROUP (ORDER BY O.logTimes) logTimes
FROM (
   SELECT
      O.id,
      O.logDate,
      O.G G,
      CASE
         WHEN TO_CHAR(MIN(O.log), 'HH24:MI') <> TO_CHAR(MAX(O.log), 'HH24:MI') THEN
            TO_CHAR(MIN(O.log), 'HH24:MI') || ', ' || TO_CHAR(MAX(O.log), 'HH24:MI')
         ELSE
            TO_CHAR(MIN(O.log), 'HH24:MI')
      END logTimes
   FROM (
      SELECT
         T.id,
         T.log,
         TRUNC(T.log) logDate,
         TO_CHAR(T.log, 'HH24') || FLOOR(TO_NUMBER(TO_CHAR(T.log, 'MI')) / 15) G
      FROM
         Test T
      ) O
   GROUP BY
      O.id, O.logDate, O.G
   ) O
GROUP BY
   O.id, O.logDate
;

请参见SQL提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM