Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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é.
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
Fijate en esta aplicacion
Hola José,
Un par de anotaciones sobre fechas en QlikView:
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
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
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