Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Problema con select sql
Message
De
16/03/2003 10:15:43
Hilmar Zonneveld
Independent Consultant
Cochabamba, Bolivie
 
 
À
11/03/2003 10:20:58
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Divers
Thread ID:
00764234
Message ID:
00766304
Vues:
21
>Hola grupo.
>Tengo 3 tablas : Tabla1 , Tabla2 y Tabla3
>
>
>Tabla1 : tabla1.id, tabla1.desc
>Tabla2 : tabla2.id, tabla2.tabla1_id, tabla2.desc
>Tabla3 : tabla3.id, tabla3.tabla1_id, tabla3.fecha
>
>
>tabla1.id tabla1.desc
>-------------------------
>1 Pedro
>2 Juan
>3 Alberto
>
>
>
>tabla2.id tabla2.desc tabla2.tabla1_id
>----------------------------------------
>100 casa 1
>101 auto 1
>102 casa 2
>103 yate 2
>104 auto 3
>105 casa 3
>
>
>tabla3.id tabla3.fecha tabla3.tabla1_id
>------------------------------------------
>1000 01/10/2002 1
>1001 06/10/2002 1
>1002 07/11/2002 2
>1003 08/11/2002 2
>1004 08/11/2002 3
>1005 10/11/2002 3
>
>
>
>Lo que necesito es una consulta que me muestre todos los registros de tabla1 con sus respectivos registros de tabla2 y el campo tabla3.id del valor maximo sobre tabla3.fecha
>
>o sea me deberia quedar algo asi algo asi :
>
>tabla1.id tabla1.nombre tabla2.desc tabla3.id
>---------------------------------------------------------
>1 Pedro casa 1001
>1 Pedro auto 1001
>2 Juan casa 1003
>2 Juan yate 1003
>3 Alberto auto 1005
>3 Alberto casa 1005
>
>
>¿ Es posible eso ?
>Gracias de antemano.

A ver, veamos si puedo hacer algo. Creo que sería algo así como lo siguiente:

Primero, unir las dos primeras tablas.
select id, desc from Tabla1 into cursor Temp1
Ahora, obtener la fecha mayor para cada grupo de Tabla3.
select Tabla1_id, max(Fecha) as Fecha;
  from Tabla3;
  into cursor Temp2
En base a esas fechas, obtener el número mayor.
select Temp2.*, Tabla3.Id as Tabla3_id;
  from Temp2 join Tabla3;
    on Temp2.Fecha = Tabla3.Fecha;
      and Temp2.Id = Tabla3.Tabla1_id;
  into cursor Temp3
Finalmente, unir todos los resultados, de los cursor Temp1 y Temp3.

Espero que funcione, sin demasiadas adaptaciones.

Notas:
  • Quizás puedas combinar algunas de las órdenes, en menos órdenes SQL - SELECT.
  • Sin embargo, para fines de informes, frecuentemente es más rápido tener varias órdenes separadas.
  • A veces, una función de búsqueda puede ser más rápida que un SQL - SELECT "rebuscado". Puede que fracciones de segundo no te importen, pero si hallas que el rendimiento es demasiado lento,hay que probar un poco con diferentes alternativas.

    Saludos,

    Hilmar.
    Difference in opinions hath cost many millions of lives: for instance, whether flesh be bread, or bread be flesh; whether whistling be a vice or a virtue; whether it be better to kiss a post, or throw it into the fire... (from Gulliver's Travels)
  • Précédent
    Répondre
    Fil
    Voir

    Click here to load this message in the networking platform