none
Media com data RRS feed

  • Pergunta

  • Amigos,

    Preciso saber a media que um produto fica no supermercado

    Entao no comando abaixo eu fiz o seguinte:

    select (tblrhgrecepcao.DtRecep - tblrhgtitulos.DataUltimoRegistro) /30

    from tblRHGTitulos

    inner join tblRHGRecepcao on tblrhgrecepcao.PK_Recepcao = tblrhgtitulos.FK_tblRHGRecepcaoRecepcao

    where tblRHGTitulos.DataUltimoRegistro is not null

     tblrhgrecepcao.DtRecep    ( data que o produto entrou)

      tblrhgtitulos.DataUltimoRegistro  (data que o produto passou no caixa)

    Perguntas:

    1 - Eu teria que colocar tambem o numero do produto?

    2 - Esta dando o erro abaixo

    Msg 257, Level 16, State 3, Line 4

    Implicit conversion from data type smalldatetime to int is not allowed. Use the CONVERT function to run this query.

    Como posso resolver essas duas questoes?

    quarta-feira, 23 de maio de 2012 18:07

Respostas

  • Luis,

    Acredito que você conseguirá resolver esse erro usando um DATEDIFF, como abaixo:

    select DATEDIFF(DAY, tblrhgrecepcao.DtRecep, tblrhgtitulos.DataUltimoRegistro) /30 
      from tblRHGTitulos
     inner join tblRHGRecepcao 
        on tblrhgrecepcao.PK_Recepcao = tblrhgtitulos.FK_tblRHGRecepcaoRecepcao
     where tblRHGTitulos.DataUltimoRegistro is not null

    Mas eu não entendi a divisão por 30 para fazer o cálculo da média. Acho interessante você usar o a função AVG para isso, como no exemplo que faço abaixo.

    CREATE TABLE #Teste
      (
        Id INT IDENTITY(1,1),
        Produto CHAR(1),
        Entrada DATETIME,
        Saida DATETIME
       )
       
    INSERT INTO #Teste (Produto, Entrada, Saida)
    VALUES ('A', '2012-05-01', '2012-05-22'),
           ('A', '2012-05-01', '2012-05-18'),    
           ('A', '2012-05-01', '2012-05-15'),
           ('B', '2012-05-01', '2012-05-24'),
           ('B', '2012-05-01', '2012-05-06'),
           ('B', '2012-05-01', '2012-05-08')
           
           
    ;WITH Media AS
    (
      SELECT Produto,
             DATEDIFF(DAY, Entrada, Saida) QtdDias
        FROM #Teste                  
    )
    
    SELECT Produto,
           AVG(QtdDias) MediaDias
      FROM Media
     GROUP BY Produto

    No exemplo inseri alguns regitros para dois produtos diferentes em uma temporária, depois calculei a média de dias entre a entrada e saída de cada um.

    []'s
    Philipe Souza
    E-mail: Philipe.s.souza@hotmail.com

    • Marcado como Resposta Luis_Fernando2 quinta-feira, 24 de maio de 2012 20:17
    quinta-feira, 24 de maio de 2012 13:22