Calcular el valor de un campo usando SQL

Yo he hecho consultas básicas utilizando SQL pero en este momento tengo que hacer algo más complejo
que no se como abordar y agradecería mucho si pueden ayudarme. La situación es la siguiente:
Tengo una Tabla que tiene entre otros los campos: usuario, fecha, hora y tiempo_gastado. Los
registros de esta tabla NO tienen un orden particular y necesito calcular el campo tiempo_gastado
el cual corresponde para un mismo usuario a la diferencia entre fecha y hora siguiente menos fecha y hora
anterior (el último registro de ese usuario tendría un valor nulo).
No sé si pueda hacer este cálculo utilizando SQL con un alias de la tabla... ¿o de que forma podría hacerlo?

1 respuesta

Respuesta
1
Tengo un par de alternativas en Oracle para tu pregunta.
Directamente desde un SQL no he podido resolverlo (lo cual no quiere decir que no se pueda, solo que yo no he podido), pero se dos formas que si te funcionarían.
1. Mediante disparadores, de forma que el campo Tiempo Gastado sea un campo que se calcule cada vez que insertas una fila en tu tabla, es decir. Tras insertar una fila, tu actualizas el campo Tiempo Gastado de tu tabla con un algo de este estilo:
Begin
UPDATE TABLA
SET tiempo_gastado = fecha - :new.fecha
WHERE usuario=:new.usuario
AND fecha < :new.fecha
AND tiempo_gastado is NULL;
2. La otra alternativa, que es la que más me gusta es que crees una función, llamada Tiempo_Gastado. Y que la llames en tu Select. A esa función, le pasarías como parámetro el usuario y la fecha, y ella te devolvería la diferencia. La función buscaría la mayor fecha y hora para un usuario, y se lo rrestaría a lo que le llega como parámetro, luego esa diferencia es lo que te devuelve.
Así la select sería
SELECT USUARIO, FECHA, FTIEMPO_GASTADO(usario,Fecha) Tiempo_Gastado;
Esto te daría tus tres campos.
Suerte y ya contarás.
Pablo Raso.
La diferencia entre usar la primera o la segunda de las alternativas que te he planteado radica en si quieres que tu campo calculado TiempoGastado, sea permanente físicamente o si solo te interesa en el momento de hacer la consulta.
Para que sea permanente debes usar la primera, pero piensa que deberías también implementar un control en caso de borrado de filas.
Por eso yo, si no vas a guardar el campo (no es necesario pues siempre puedes usar la función para todo), me inclino por la segunda alternativa.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas