Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/08/2012, 14:42
lap88
 
Fecha de Ingreso: septiembre-2010
Ubicación: Caracas
Mensajes: 83
Antigüedad: 13 años, 7 meses
Puntos: 6
trigger que obtiene un registro pasado completo

hola a todos! les consulto ahora mi duda

estoy haciendo un trigger que me permita comparar los datos que estoy insertando en una tabla con los ultimos datos (el que tiene la fecha mas reciente) de la misma tabla con el mismo nombre (en este caso es un nombre de una cola de llamadas)

una fila de esta tabla tiene el nombre, la fecha y una serie de estadisticas.

Lo que estoy haciendo es comparar si la nueva estadistica es mayor a la pasada, se la resto y asi obtengo la diferencia para que la estadistica no sea acumulativa (ya que asi la obtengo de otra fuente)

en fin, despues de tanto palabreo, un extracto de lo que tengo por ahora

Código:
delimiter //
CREATE TRIGGER prueba BEFORE INSERT ON basededatos.rol
FOR EACH ROW
BEGIN
    SET @val = (SELECT valor FROM rol ORDER BY fecha DESC LIMIT 1);
    
    IF NEW.valor >= @val THEN SET NEW.valor = NEW.valor - @val;
    END IF;
END
//
Todo funciona muy bien, pero resulta que eso lo tengo que hacer con otros 8 campos mas o menos, de la misma fila que obtengo ordenando por fecha
lo que se me ocurre es una forma de hacer un select y a su vez asignar a valores temporales, no existe la manera de hacer un select y obtener esos valores que trae el select?

SELECT * FROM rol ORDER BY fecha DESC LIMIT 1 y cada campo ponerlo en una variable @var1, @var2, etc...
asi solo tendría que hacer un select, ya que creo que si hago
SET @val1 = (SELECT valor1 FROM rol ORDER BY fecha DESC LIMIT 1);
SET @val2 = (SELECT valor2 FROM rol ORDER BY fecha DESC LIMIT 1);

por ejemplo, supongo que seria muy fuerte para la base de datos ya que tendria como 8 selects dentro de un insert que se ejecuta con un insert, y a su vez por fuera ejecuto ese insert como 10 veces, es decir 10 inserts * 8selects

Gracias por la ayuda, si no es posible lo que quiero hacer pues bueno, igual vale!