none
Ajuda com SELECT RRS feed

  • Pergunta

  • Olá pessoal, tenho a seguinte tabela REGISTROS

    COD, ID, DATA, HORA, REFERENCIA

    ---------------------------------------------

    1, 7S88C6, 15/01/2013, 08:20:00, 1
    2, 7CC8FE, 15/01/2013, 08:21:00, 1
    3, 7SDV54, 15/01/2013, 08:22:00, 2
    4, 74S5XD, 15/01/2013, 08:23:00, 3
    5, 7S88C6, 15/01/2013, 09:20:00, 2
    6, 7CC8FE, 15/01/2013, 09:21:00, 2
    7, 7SDV54, 15/01/2013, 09:22:00, 3
    8, 74S5XD, 15/01/2013, 09:23:00, 4

    ===========================================

    Eu preciso obter a quantidade de ids unicos em cada referencia, ou seja onde o id 7S88C6 teve o primeiro registro que não se repita em outra referencia

    referencia 1 soma dos ids unicos = 2
    referencia 2 soma dos ids unicos = 1 (somente o id 7SDV54, os outros entram na referencia 1, por vir primeiro)

    como fazer isso?

    Obrigado desde já!

    terça-feira, 15 de janeiro de 2013 15:53

Respostas

  • Boa tarde,

    Experimente desta forma:

    select r.REFERENCIA, COUNT(distinct r.ID) as QuantidadeIds
    from Registros as r
    where not exists 
                     (select 1 from Registros as o
                      where o.ID = r.ID and
                      CAST(o.DATA as DateTime) + O.HORA < CAST(r.DATA as DateTime) + R.HORA)
    group by r.REFERENCIA

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta DarkDucke quarta-feira, 16 de janeiro de 2013 23:31
    quarta-feira, 16 de janeiro de 2013 19:01

Todas as Respostas

  • DarkDucke,

    Veja se resolve com este código abaixo.

       

    SET DATEFORMAT DMY

    IF OBJECT_ID('TEMPDB..#TESTE') IS NOT NULL 
       DROP TABLE #TESTE

    CREATE TABLE #TESTE (ID INT,CHAVE VARCHAR(100),DATA DATE,REFERENCIA INT)


    INSERT INTO #TESTE(ID,CHAVE,DATA,REFERENCIA) VALUES(1, '7S88C6', '15/01/2013', 1)
    INSERT INTO #TESTE(ID,CHAVE,DATA,REFERENCIA) VALUES(2, '7CC8FE', '15/01/2013', 1)
    INSERT INTO #TESTE(ID,CHAVE,DATA,REFERENCIA) VALUES(3, '7SDV54', '15/01/2013', 2)
    INSERT INTO #TESTE(ID,CHAVE,DATA,REFERENCIA) VALUES(4, '74S5XD', '15/01/2013', 3)
    INSERT INTO #TESTE(ID,CHAVE,DATA,REFERENCIA) VALUES(5, '7S88C6', '15/01/2013', 2)
    INSERT INTO #TESTE(ID,CHAVE,DATA,REFERENCIA) VALUES(6, '7CC8FE', '15/01/2013', 2)
    INSERT INTO #TESTE(ID,CHAVE,DATA,REFERENCIA) VALUES(7, '7SDV54', '15/01/2013', 3)
    INSERT INTO #TESTE(ID,CHAVE,DATA,REFERENCIA) VALUES(8, '74S5XD', '15/01/2013', 4)


    SELECT A.REFERENCIA,COUNT(*) AS IDS_UNICOS
      FROM #TESTE      A WITH(NOLOCK)
      LEFT JOIN #TESTE B WITH(NOLOCK) ON B.CHAVE = A.CHAVE
                                     AND B.REFERENCIA < A.REFERENCIA
      
    WHERE B.ID IS NULL

    GROUP BY A.REFERENCIA 

    Abraços.

    Att.

    Rafael Costa

    MCP , MTA

    www.rcsalgueiro.com


    terça-feira, 15 de janeiro de 2013 16:30
  • Esse post vai tirar suas dúvidas.

    http://social.msdn.microsoft.com/Forums/pt/520/thread/a5d1bc75-1b0c-45b3-b9cc-4192f778af79

    Qualquer coisa posta aí!

    Se for útil, por favor me qualifique!

    Obrigado.

    terça-feira, 15 de janeiro de 2013 20:32
  • SELECT  SUM(REFERENCIA) , COD, ID, DATA, HORA

    FROM TABELA

    WHERE REFERENCIA = 1

    GROUP BY DATA

    terça-feira, 15 de janeiro de 2013 20:38
  • Pessoal, não deu certo, deixa eu tentar explicar direito o que preciso...

    eu preciso somar quantos IDS agrupados por REFERENCIA, mais que não entre na soma caso já tenha entrado em alguma outra referencia, isso pela menor HORA

    veja o ID 7S88C6 que está com horario 08:20:00 referencia 1, esse id se repete no registro 5 HORA = 09:20:00 ele não deve entrar na soma da referencia 2 ao qual ele faz parte pq já entrou na soma da referencia 1, a soma dos ids unicos com menor horario que não se repita em outras referencias!

    Obrigado novamente!

    quarta-feira, 16 de janeiro de 2013 17:47
  • Boa tarde,

    Experimente desta forma:

    select r.REFERENCIA, COUNT(distinct r.ID) as QuantidadeIds
    from Registros as r
    where not exists 
                     (select 1 from Registros as o
                      where o.ID = r.ID and
                      CAST(o.DATA as DateTime) + O.HORA < CAST(r.DATA as DateTime) + R.HORA)
    group by r.REFERENCIA

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta DarkDucke quarta-feira, 16 de janeiro de 2013 23:31
    quarta-feira, 16 de janeiro de 2013 19:01