Ver Mensaje Individual
  #2  
Antiguo 07-07-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Reputación: 24
guillotmarc Va por buen camino
Cita:
Empezado por gluglu Ver Mensaje
Hola !

Estoy intentando crear un Stored Procedure en Firebird 2.1 de la siguiente manera :

1ª Consulta : De un conjunto de registros determinado que obtengo, los ordeno de una manera específica y sólo tomo el 1er registro.

Código SQL [-]Select .... order by .... rows 1


2ª y 3ª Consultas posterior : Hago un Select de registros determinados y me devuelve cada consulta un número de registros determinado

Estas tres consultas las tengo que unir y devolver los registros ordenados de manera ascendete por un campo Timestamp.

Hasta aquí más o menos no tengo problemas.

El problema que tengo ahora está en que entre cada uno de esos registros, ordenados por Timestamp (Fecha y Hora), necesito a su vez obtener un totalizado de registros que se han producido entre cada uno de los Timestamp's.

Me explico con un ejemplo y algunos datos : Supongamos que las tres primeras consultas me devuelven :
1 01.01.11 10:00
2 01.02.11 11:00
3 01.03.11 12:00
4 01.04.11 13:00
5 01.05.11 14:00

Mi consulta final debe devolverme además un totalizado de registros cuya fecha de creación haya sido entre los timestamp de 1 y 2, 2 y 3, 3 y 4 .... para que me quede al final algo así como

1 01.01.11 10:00
Totalizado = 5
2 01.02.11 11:00
Totalizado = 3
3 01.03.11 12:00
Totalizado = 0
4 01.04.11 13:00
Totalizado = 7
5 01.05.11 14:00

He intentado hacer un For Select con un Union entre las tres primeras consultas, para despues dentro del bucle begin end del 'For Select' realizar los cálculos de los totalizados, pero me encuentro con el problema de que la primera consulta incluye un 'order by' y un 'rows 1'. Ya que necesito que sólo me devuelva el primer registro de varios, es indispensable el 'order by' + 'rows 1'.

El problema es que después de un 'order by' y 'rows 1' no puedo ejecutar un 'Union'.

Código SQL [-]For Select 1 .... order by ... rows 1 union Select 2 .... union Select 3 .... do begin Cálculo del Totalizado entre Fechas de Registros end


Alguna idea o ayuda cómo enfocar este cálculo ?

Gracias
Hola.

Tienes una sintaxis alternativa al ROW 1, y es FIRST 1. En lugar de ir al final del comando SQL, va justo después del SELECT.

Lo he comprobado y no tiene ningún problema para ser usado en conjunción del UNION.

Código SQL [-]
For Select first 1 1 ....
      union     
      Select 2 ....     
      union     
      Select 3 ....   
do begin    
     Cálculo del Totalizado entre Fechas de Registros 
end
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita