Pular para o conteúdo
  • Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 9 anos, 1 mês atrás por Avatar de rmanrman.
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #107793
    Avatar de DayaneDayane
    Participante

      Bom dia pessoal,
      Estou com um probleminha em uma consulta que é muito importante.
      Eu precisava de algo que me mostrasse os GAPs (furos) em uma sequencia de datas..
      Exemplo:

      Vejam que do dia 02-09 ele pula para 05-09.. Faltam os dias 03 e 04.
      Então consegui a solução, ele fala onde esta faltando os dias:

      Agora meu grande problema é que essa tabela tem muuuuuuuitas datas, muiiitos dados e eu preciso usar o WHERE para selecionar um periodo de datas, e o que acontece? Meu where está se perdendo, sem o WHERE funciona (bem demorado) com o where ele não me mostra os furos na sequencia de datas.

      Preciso por exemplo, buscar data a partir do dia 15-09-2015, OU por exemplo, algo que esteja entre 01-08-2015 e 13-09-2015.
      E não consigo.

      Segue código:

      [color=#ff0000]with seq as (
      select level l
      from dual connect by level <= ( SELECT MAX(TO_NUMBER(TO_CHAR(START_DATE,'DD'))) FROM DIASUSADOS) ) select * from (select l, TO_CHAR(START_DATE,'DD-MM-YYYY') as data, decode(START_DATE, null, l ) FURO_DATA from seq left outer join DIASUSADOS on ( l = TO_NUMBER(TO_CHAR(START_DATE,'DD')) ) GROUP BY DIASUSADOS.START_DATE, l order by 1, DIASUSADOS.START_DATE) where data >= TO_DATE(’15-09-2015′, ‘DD-MM-YYYY HH24:Mi’);[/color]

      Se tirar o WHERE ela vai funcionar perfeitamente, com o where não.
      Alguém pode me ajudar? Onde devo inserir meu where?

      Outro código que tenho é:
      [color=#008800]with seq as (
      select level l
      from dual connect by level <= ( SELECT MAX(TO_NUMBER(TO_CHAR(START_DATE,'DD'))) FROM DIASUSADOS) ) select l, TO_CHAR(START_DATE,'DD-MM-YYYY') as data, decode(START_DATE, null, l ) GAP from seq left outer join DIASUSADOS on (l = TO_NUMBER(TO_CHAR(START_DATE,'DD'))) --WHERE DIASUSADOS.START_DATE >= TO_DATE(’15-09-2015′,’DD-MM-YYYY’)
      GROUP BY DIASUSADOS.START_DATE, l
      order by 1, START_DATE;[/color]

      Nenhum funciona com o where.

      Desde já agradeço.

      #107801
      Avatar de rmanrman
      Participante

        @Dayane

        O WHERE vai vir por fora de tudo:


        SELECT *
        FROM (
        with seq as (
        select level l
        from dual connect by level = TO_DATE('15-09-2015','DD-MM-YYYY')

      Visualizando 2 posts - 1 até 2 (de 2 do total)
      • Você deve fazer login para responder a este tópico.
      plugins premium WordPress