Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Select que me devuelva n filas con fechas incrementales (https://www.clubdelphi.com/foros/showthread.php?t=72512)

gluglu 23-02-2011 13:56:53

Select que me devuelva n filas con fechas incrementales
 
Hola !

Es posible hacer algo en Firebird, llámese 'Select simple' o 'Select con Procedimiento Almacenado', para que obtenga n Filas empezando por una fecha determinada para el primer registro y autoincrementar la fecha por cada registro ?? :confused:

Algo así como
Código Delphi [-]
Select FECHA from AUTOINCREMENTAR(Today, 10)
siendo AUTOINCREMENTAR algún procedimiento almacenado, que tome como parámetro de entrada una fecha inicial (en el caso del ejemplo, hoy) y un número de registros a obtener (en el ejemplo, 10).

No estoy muy puesto con el tema de Stored Procedure's por lo que no consigo ver la solución.

Gracias como siempre por vuestros sabios consejos :)

Casimiro Noteví 23-02-2011 15:13:23

Sí, se me ocurre que como las fechas son números double, puedes crear un bucle aumentando una variable fecha que en cada iteración sume lo que te interese: un día, una hora, etc.
Incluso creo que tengo algo hecho, voy a buscarlo...

Casimiro Noteví 23-02-2011 15:20:22

Código SQL [-]
SET TERM ^ ;

CREATE PROCEDURE autoincrementarfecha 
 ( fecha date, dias INTEGER ) 
RETURNS 
 ( result date )
AS 
BEGIN
  
  while (dias>0) do
  BEGIN
    fecha = fecha+1;
    result = fecha;
    dias=dias-1;  
    SUSPEND;
  END   
  
END^

SET TERM ; ^

Para llamarlo:

Código SQL [-]
select * from AUTOINCREMENTARFECHA('now',10)

Casimiro Noteví 23-02-2011 15:25:08

Y el resultado:
http://img545.imageshack.us/img545/5944/pantallazoo.jpg


gluglu 23-02-2011 15:27:13

Muchas gracias !

Es exactamente lo que quería y ya lo había pensado tal y como lo indicas, pero no supe plasmarlo correctamente.

Lo tenía casi igual pero no me daba cuenta que había que devolver el resultado con Result en el procedimiento.

:rolleyes:

Casimiro Noteví 23-02-2011 15:30:17

Bueno, le he puesto result, aunque vale cualquier nombre válido para una variable.
Me alegro que te haya servido.

Delphius 23-02-2011 15:39:57

Casi, creo que deberías fijarte bien que pasa con la imagen que has puesto, y la de tu firma también, porque no se ve.

Saludos,

Casimiro Noteví 23-02-2011 15:49:27

Pues yo las veo normales :)

Delphius 23-02-2011 15:59:40

1 Archivos Adjunto(s)
Cita:

Empezado por Casimiro Notevi (Mensaje 391725)
Pues yo las veo normales :)

Entonces será problema mio y algo me la bloquea :confused:, porque lo que veo es una imagen de una rana congelada en un bloque de hielo. Ajunto una imagen para que veas como me aparece.

Saludos,

cloayza 23-02-2011 16:02:19

Talvez a Casimiro le gustan las ranas...:D:D

Saludos

Casimiro Noteví 23-02-2011 16:06:17

¿Nadie ve la imagen?, ¿sólo yo? :confused:

gluglu 23-02-2011 16:11:29

.... no sigamos 'desvirtuando' el hilo ! :o .... yo lo veo todo correctamente igual que Casimiro, su imagen y su firma y todo correcto.

Dejo aquí el código del Stored Procedure y de un Select que me devuelve para cada fecha y para cada categoría (de otra tabla), un número de 'habitaciones' de cada categoría y para cada fecha del margen que introduzca.

Código Delphi [-]
CREATE OR ALTER PROCEDURE AUTO_INC_DATE (
    in_first_date date,
    in_count_days integer)
returns (
    out_date date)
as
begin
  While (IN_COUNT_DAYS > 0) do begin
    OUT_DATE = IN_FIRST_DATE;
    IN_FIRST_DATE = IN_FIRST_DATE + 1;
    IN_COUNT_DAYS = IN_COUNT_DAYS - 1;
    SUSPEND;
  end
end

Código Delphi [-]
Select OUT_DATE, CA.SUBCATEGORYNO,
(Select Count(*) from OBJECTS OB
 where OB.CATEGORYNO  = CA.CATEGORYNO
 and OB.SUBCATEGORYNO = CA.SUBCATEGORYNO
 and OB.BUILDINGNO    = 1) as NUM_OBJS
from AUTO_INC_DATE('TODAY', 10)
left join CATEGORIES CA
  on CA.CATEGORYNO = 1
  and CA.SUBCATEGORYNO <> 0

Resultados :
Out_Date SubCateg Num_Objs
23.02.2011 1 0
23.02.2011 2 11
23.02.2011 3 5
23.02.2011 4 5
23.02.2011 5 1
24.02.2011 1 0
24.02.2011 2 11
24.02.2011 3 5
24.02.2011 4 5
24.02.2011 5 1
....
etc, así hasta el 04.03.2011 con los mismos registros que anteriormente indicados

Espero le sirva a alguien ! :rolleyes:

Delphius 23-02-2011 16:15:47

Cita:

Empezado por gluglu (Mensaje 391734)
.... no sigamos 'desvirtuando' el hilo ! :o .... yo lo veo todo correctamente igual que Casimiro, su imagen y su firma y todo correcto.

Disculpa gluglu si parecía que estaba desvirtuando el hilo. Es que a mi también me hubiera gustado entender el ejemplo de Casi y la imagen me podría ayudar.

Me alegro que te sirviera :)

Saludos,

Casimiro Noteví 23-02-2011 17:16:05

He subido la imagen a otro sitio, Delphius, si la ves bien entonces me avisas y borramos los posts que no sirven.


La franja horaria es GMT +2. Ahora son las 16:20:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi