Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta de valores consecutivos (https://www.clubdelphi.com/foros/showthread.php?t=46213)

Guillermosalva 26-07-2007 16:03:45

Consulta de valores consecutivos
 
Hola necesito saber si hay alguna forma de con una consulta descubrir si hay 3 valores consecutivos
A modo de ejemplo. En mi tabla tengo nombres y fechas de nacimiento, quiero saber si nacieron 3 con el mismo nombre(pepe) consecutivamente.

Nombre Fecha nac
pepe 16/02/1990
pepe 17/02/1990
pepe 18/02/1990
juan 19/02/1990

Ivanzinho 26-07-2007 16:27:04

¿Que motor de bases de datos utilizas? Así de primeras se me ocurre que lo puedes hacer en un procedimiento almacenado.

Un saúdo.

Guillermosalva 26-07-2007 16:32:59

Utilizo oracle, me olvide de decir que ademas necesito las fechas de los 3 consecutivos que encuentro.

Ivanzinho 26-07-2007 16:43:46

Nunca he usado oracle, pero te comento lo que puedes hacer:

Seleccionas los distintos nombres que hai en la BD con count > 2, luego recorres los registros de cada unos de estos nombres comprobando las fechas y devolviendo los que cumplan los requisitos.

Seguro que hay formas mejores de hacerlo, pero así de primeras es lo que se me ocurre.

Un saúdo.

Guillermosalva 26-07-2007 17:02:21

Habia pensado algo parecido pero el problema es que algunas veces hay 3 registros pero no son consecutivos.

Ivanzinho 27-07-2007 08:49:15

Cita:

Empezado por Guillermosalva
Habia pensado algo parecido pero el problema es que algunas veces hay 3 registros pero no son consecutivos.

Por eso mismo es por lo que te comento que despues de seleccionar los valores que tengan 3 o mas entradas en la base de datos debes recorrerlos comprobando las fechas. La cosa quedaría algo así (nunca trabaje en oracle por lo que te pongo la notación de firebird).
Código SQL [-]
parametros de salida
  fecha1, fecha2, fecha3 : Date;
  nombre : VarChar;
Variables
  fecha : Date;
for select nombre 
    from tabla
    group by nombre
    having count(*) > 2 
    into :nombre do
  begin
    fecha1 = null;
    fecha2 = null;
    fecha3 = null;
    for select fecha 
        from tabla
        where nombre = :nombre
        order by fecha
        into :fecha do begin
      begin
        fecha1 = fecha2;
        fecha2 = fecha3;
        fecha1 = fecha;

        if ((fecha1 = fecha2 + 1) and (fecha2 = fecha3 + 1)) then
          suspend;
      end
  end

Un saúdo


La franja horaria es GMT +2. Ahora son las 06:23:45.

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