4 Replies Latest reply: Feb 28, 2012 10:15 AM by Jose Tos RSS

    Diferencia entre fechas formato numérico

    Jose Tos

      Hello, I'm trying to create new columns as I loaded the rows in a table resident with the difference between the date of the next row with the date of the current row:

       

      TIEMPO:

      LOAD Tarjeta as ID_Tarjeta,

           peek('TimeFloor',RecNo()+1) - peek('TimeFloor',RecNo()) as Tiempo,

           peek('TimeFloor',RecNo()+1) - peek('TimeFloor',RecNo())/60 as Minutos,

           peek('TimeFloor',RecNo()+1) - peek('TimeFloor',RecNo())/3600 as Horas,

           1 as contador

      Resident TRANSACCIONES;

       

      TimeFloor is the result of making a Floor () to a date format 'YY-MM-DD hh: mm: ss' and as a result I have numbers like this: 465465.6899074054

       

      I don't know what formats are suitable for operation between dates and I also like to have these differences in numeric fields can get days, hours, minutes or seconds as a result for each difference between dates.


      Any help would be very useful, thanks.

       

      José.

       

      Hola, estoy intentando crear columnas nuevas a medida que voy cargando las filas de una resident table con la diferencia entre la fecha de la fila siguiente con la fecha de la fila actual:

       

      TIEMPO:

      LOAD Tarjeta as ID_Tarjeta,

           peek('TimeFloor',RecNo()+1) - peek('TimeFloor',RecNo()) as Tiempo,

           peek('TimeFloor',RecNo()+1) - peek('TimeFloor',RecNo())/60 as Minutos,

           peek('TimeFloor',RecNo()+1) - peek('TimeFloor',RecNo())/3600 as Horas,

           1 as contador

      Resident TRANSACCIONES;

       

      TimeFloor es el resultado de hacer un Floor() a una fecha de formato 'YY-MM-DD hh:mm:ss' y como resultado tengo números de este estilo: 465465.6899074054

       

      No sé cuáles son los formatos adecuados para operar entre fechas y además me gustaría poder tener esas diferencias en campos numéricos pudiendo obtener días, horas, minutos o segundos como resultado para cada diferencia entre fechas.

       

      Cualquier ayuda sería de gran utilidad, gracias.

       

      José.

        • Re: Diferencia entre fechas formato numérico
          j i

          Fijate en esta aplicacion

          • Re: Diferencia entre fechas formato numérico
            Miguel Angel Baeyens de Arce

            Hola José,

             

            Un par de anotaciones sobre fechas en QlikView:

            • La fecha "0" equivale al 30/12/1899. La fecha "40966" equivale a 27/02/2012
            • Cuando una fecha tiene decimales, significa que el campo es una marca de tiempo que contiene día, mes, año pero también horas y minutos (y posiblemente segundos). Para QlikView, 24 horas es igual a 1. Así que "40966,75" equivaldría a "27/12/2012 18:00:00"

             

            Dependiendo del análisis que quieras realizar necesitarás quedarte con la parte de fecha (entera) utilizando la función Ceil() o Floor(), y si quieres quedarte con la parte de la hora, tendrás que utilizar la función Frac().

             

            Espero que te sirva.

             

            Miguel

              • Diferencia entre fechas formato numérico
                Jose Tos

                Hola Miguel,

                 

                gracias por tu respuesta, siempre tan certeras.

                 

                He adjuntado una tabla execel con los resultados que me está dando al ejecutar este trozo de script:

                 

                LOAD  NoTarjeta, 

                           FechaHora as F_Hora,

                       peek('FechaHora',RowNo()+1,'TRANSACCIONES') - peek('FechaHora',RowNo(),'TRANSACCIONES') as  Tiempo,

                 

                Resident TRANSACCIONES

                Order by NoTarjeta, TimeFloor ;

                 

                Parece funcionar pero necesitaría que los resultados de la columna 'Resultado actual' se puedan entender porque no estoy seguro de que los valores que me aparecen se correspondan con los tiempos que deberían ser.

                 

                También tengo otro problema y es tener en cuenta el cambio de 'NoTarjeta', puesto que la diferencia de tiempos tiene que separarse por tarjeta y por tanto no hacer la operación de resta al cambiar de una tarjeta a otra.

                 

                Como siempre, muchas gracias por vuestra ayuda.

                 

                Saludos

                  • Diferencia entre fechas formato numérico
                    Jose Tos

                    Encontré la solución después de darle algunas vueltas

                     

                    date(peek('TimeFloor',RecNo(),'TRANSACCIONES') -peek('TimeFloor',RecNo()-1,'TRANSACCIONES'),'hh:mm:ss')

                     

                    La clave estaba en que RecNo() devuelve la posición de la siguiente fila a la actual, por lo que la resta tenía que hacerla entre RecNo() y RecNo()-1, ya que para la primera inserción, RecNo() devuelve un 2 y no un 1

                     

                    Espero que le pueda servir a alguien para situaciones similares

                     

                    Saludos