Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Mostrar campos que no esten en una tabla (https://www.clubdelphi.com/foros/showthread.php?t=15937)

jbetancurt 10-11-2004 05:36:54

Mostrar campos que no esten en una tabla
 
Un saludo al foro, este es mi primer post y pues espero ser lo suficientemente claro.
Tengo un procedimiento almacenado (En firebird 1.5) el cual me crea un ciclo de horas, las cuales uso en diferentes consultas y en otros procedimientos, al realizar un "select" sobre este obtengo algo como esto:

Parámetros horaini = '7:00', horafin ='8:00', intervalo = 2 (el valor de intervalo se multiplica por 5) y los demás parámetros son null

Código SQL [-]
  Select HoraSalida from P_ObtenerHoras('7:00','8:00',2,Null,Null)
Código:

HoraSalida
7:00 a.m.
7:10 a.m.
7:20 a.m.
7:30 a.m.
7:40 a.m.
7:50 a.m.
8:00 a.m.

y tengo una tabla llamada TUnidades y contiene 4 campos los cuales son FFecha, FHora, FNumeroUnidad, FNombre, al hacer un "select" obtengo algo como esto:
Query_TUnidades:

Código SQL [-]
select Fhora from TUnidades where  FFecha = cast('now' as date) and FNumeroUnidad = 1

Código:

  Ffecha
7:10 a.m.
7:30 a.m.
7:50 a.m.
8:00 a.m.

ahora... quiero filtrar los resultados del procedimiento cruzandolo con la tabla, y que solo me muestre los valores que no estén en el resultado del query realizado en la tabla es decir los siguientes valores:

Código SQL [-]
Select HoraSalida from P_ObtenerHoras('7:00','8:00',2,Null,Null) Where HoraSalida <> Query_TUnidades

Código:

HoraSalida
7:00 a.m.
7:20 a.m.
7:40 a.m.

a continuación mando el codigo del procedimiento almacenado.

Código SQL [-]
SET TERM ^^ ;
CREATE PROCEDURE P_OBTENERHORAS (
  HORA_INI Time,
  HORA_FIN Time,
  INTERVALO Integer,
  PARADAINI Time,
  PARADAFIN Time)
 returns (HORASALIDA Time)
AS
begin
  HORASALIDA= HORA_INI;
  SUSPEND;
  INTERVALO = INTERVALO * 300;   /*Aquí defino que el intervalo minimo es de 5 min*/
  WHILE(HORASALIDA< HORA_FIN ) DO
  BEGIN
    if (((paradaini-(2*intervalo)) < HORASALIDA) and ((paradafin-300) > HORASALIDA)) then
      HORASALIDA= paradafin;
    else
      HORASALIDA=HORASALIDA+ INTERVALO;
    SUSPEND;
  END
end
^^
SET TERM ; ^^

athlontado 10-11-2004 13:52:52

Mira a ver si te sirve esto:

Código:

Select HoraSalida from P_ObtenerHoras('7:00','8:00',2,Null,Null)
  Where HoraSalida NOT IN (select Fhora from TUnidades where  FFecha = cast('now' as date) and FNumeroUnidad = 1)


jbetancurt 11-11-2004 04:15:30

Gracias
 
OK todo salio tal cual necesitaba.
Me toca que aprender ma SQL...


La franja horaria es GMT +2. Ahora son las 11:09:37.

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