Somando registros de 15 em 15 linhas

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
lusquera
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Sex, 18 Ago 2017 2:55 pm

Olá a todos,
Eu tenho esta consulta, ela retorna uma data agrupada varchar, e algumas somas. Essas somas são passagens de veículos no pedágio que eu trabalho, só para vocês entenderem.

Segue consulta que eu estou realizando:

Selecionar tudo

SELECT SUBSTR(CAB_MOMENTO,1,12),
Sum(CASE WHEN COMVSAUTO = '1' AND NOME IN ('SUL','OESTE') THEN 1 ELSE 0 END) 
SUL_OESTE_AUTO,
Sum(CASE WHEN COMVSAUTO = '0' AND NOME IN ('SUL','OESTE') THEN 1 ELSE 0 END) 
SUL_OESTE_COM,
Sum(CASE WHEN COMVSAUTO = '1' AND NOME IN ('NORTE','LESTE') THEN 1 ELSE 0 
END) NORTE_LESTE_AUTO,
Sum(CASE WHEN COMVSAUTO = '0' AND NOME IN ('NORTE','LESTE') THEN 1 ELSE 0 
END) NORTE_LESTE_COM FROM
(SELECT a.idtransaccion, a.cab_momento, a.cab_via, a.comvsauto, b.NOME
FROM
(select idtransaccion, cab_momento, cab_via, cab_estacion AS ESTACION,
CASE ctl_clase
WHEN '01' THEN 1
WHEN '07' THEN 1
WHEN '08' THEN 1
ELSE 0
END comvsauto
FROM usrhost.atransaccion
WHERE cab_momento > '20170818000000') a
INNER join
(SELECT sen.estacion AS ESTACION, via.via AS VIA, sen.nome AS NOME FROM 
usrhost.aestacion_sentido sen
INNER JOIN usrhost.avia via ON
sen.estacion = via.estacion
AND SubStr(via.via,3,1) = sen.sentido
ORDER BY 1,2) b ON
b.VIA = a.cab_via
AND b.ESTACION = a.ESTACION)
GROUP BY SUBSTR(CAB_MOMENTO,1,12)
ORDER BY 1
Segue exemplo de resultado que ela está trazendo:

Imagem

O que eu preciso fazer é somar os dados de 15 em 15 minutos, ou seja, usando a coluna um, eu preciso pegar as 15 primeiras linhas e somar todos os registros, depois pegar as outras 15 linhas e somar os registros e assim por diante.

Por exemplo:
Do minuto X para o minuto Y - 1231 | 12314 | 1241 | 21415
Do minuto X+15 para o minuto Y+15 - 1111 | 13344 | 1345 | 22455 ...

Agradeço desde já. :-o
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

boa tarde lusquera,

Você precisa apresentar este resultado numa única query?

Apresentar um subtotal acumulativo, é isso né?
lusquera
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Sex, 18 Ago 2017 2:55 pm

Pessoal, conseguimos!!

Selecionar tudo

SELECT SubStr(CAB_MOMENTO,1,10) ||' '||
       CASE WHEN To_Number(SubStr(cab_momento,11,2)) < 15 THEN '00-15'
            WHEN To_Number(SubStr(cab_momento,11,2)) < 30 THEN '15-30'
            WHEN To_Number(SubStr(cab_momento,11,2)) < 45 THEN '30-45'
            ELSE '45-00'
       END As time_period, Sum(sul_oeste_auto), Sum(sul_oeste_com),Sum(norte_leste_auto), Sum(norte_leste_com)
FROM (

SELECT SUBSTR(CAB_MOMENTO,1,12) AS cab_momento,
    Sum(CASE WHEN COMVSAUTO = '1' AND NOME IN ('SUL','OESTE') THEN 1 ELSE 0 END) SUL_OESTE_AUTO,
    Sum(CASE WHEN COMVSAUTO = '0' AND NOME IN ('SUL','OESTE') THEN 1 ELSE 0 END) SUL_OESTE_COM,
    Sum(CASE WHEN COMVSAUTO = '1' AND NOME IN ('NORTE','LESTE') THEN 1 ELSE 0 END) NORTE_LESTE_AUTO,
    Sum(CASE WHEN COMVSAUTO = '0' AND NOME IN ('NORTE','LESTE') THEN 1 ELSE 0 END) NORTE_LESTE_COM FROM
(SELECT a.idtransaccion, a.cab_momento, a.cab_via, a.comvsauto, b.NOME
FROM
(select idtransaccion, cab_momento, cab_via, cab_estacion AS ESTACION,
CASE ctl_clase
  WHEN '01' THEN 1
   WHEN '07' THEN 1
    WHEN '08' THEN 1
    ELSE 0
END comvsauto
FROM usrhost.atransaccion
WHERE cab_momento > '20170818000000') a
INNER join
(SELECT sen.estacion AS ESTACION, via.via AS VIA, sen.nome AS NOME FROM usrhost.aestacion_sentido sen
INNER JOIN usrhost.avia via ON
sen.estacion = via.estacion
AND SubStr(via.via,3,1) = sen.sentido
ORDER BY 1,2) b ON
b.VIA = a.cab_via
AND b.ESTACION = a.ESTACION)
GROUP BY SUBSTR(CAB_MOMENTO,1,12)
ORDER BY 1)
GROUP  BY SubStr(CAB_MOMENTO,1,10),CASE WHEN To_Number(SubStr(cab_momento,11,2)) < 15 THEN '00-15'
            WHEN To_Number(SubStr(cab_momento,11,2)) < 30 THEN '15-30'
            WHEN To_Number(SubStr(cab_momento,11,2)) < 45 THEN '30-45'
            ELSE '45-00'
       END 
ORDER BY 1
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes