Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Sql clause
Message
 
À
24/12/2005 10:05:41
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Titre:
Versions des environnements
Visual FoxPro:
VFP 9
OS:
Windows XP SP2
Database:
Visual FoxPro
Divers
Thread ID:
01080241
Message ID:
01080714
Vues:
12
Gregory,

pendant que la dinde "marinne" , je regarde ton code....à chaud
 && (2) create date cursor
  LOCAL i, DateFromTo[2]

  SELECT	MIN(MinDate), ;
    MAX(MaxDate) ;
    FROM Accord ;
    INTO ARRAY DateFromTo

  CREATE CURSOR Dates ( dDate D)

  FOR i = 0 TO DateFromTo[2] - DateFromTo[1]
    INSERT INTO Dates VALUES ( DateFromTo[1] + m.i )
  ENDFOR
C'est joli et bien écrit !


bernhart






>Essaye d'analyser et de comprendre le code.
>Essaye aussi sans having ( iId is null ) et regarde le resultat: Null = pas trouve, <> null = trouve
>
>Remplace le LEFT JOIN par JOIN tout court et regarde la difference
>
>Joyeux Noel.
>
>
>>Gregory,
>>
>>Tonc code semble fonctionner avec les premières dates "tordues" que j'ai essayées...
>>
>>Je fais un test réél demain et poserai ma deuxième question..( doublons )
>>
>>Un tout grand merci ...!
>>
>>joyeux réveillon..
>>
>>bernhart
>>
>>
>>
>>>Berhart,
>>>
>>>Est-ce que ceci est un pas dans la bonne direction ?
>>>
>>>CREATE CURSOR Etats (dDebut D, dFin D , iresidentid i , iid i )
>>>
>>>	INSERT INTO Etats VALUES ({^2005/01/08}, {^2005/03/30} , 1753 , 1 )
>>>	INSERT INTO Etats VALUES ({^2005/04/10}, {^2005/06/25} , 1753 , 2 )
>>>	INSERT INTO Etats VALUES ({^2005/01/10}, {^2005/06/25} , 1754 , 3 )
>>>	INSERT INTO Etats VALUES ({^2006/01/10}, {^2007/05/25} , 1756 , 4 )
>>>	INSERT INTO Etats VALUES ({^2006/05/30}, {^2007/06/25} , 1756 , 5 )
>>>	INSERT INTO Etats VALUES ({^2001/01/08}, {^2003/03/30} , 2 , 6 )
>>>
>>>	
>>>	&& (1) Min and Max Dates/Resident
>>>	&& You may have this table
>>>	&& It gives beginning and ending date per Resident
>>>	select	iresidentid, ;
>>>			Min(dDebut)	as	MinDate, ;
>>>			Max(dFin)	as	MaxDate ;
>>>		From Etats ;
>>>		into Cursor Accord ;
>>>		group by 1
>>>	
>>>	&& (2) create date cursor
>>>	local i, DateFromTo[2]
>>>	
>>>	select	min(MinDate), ;
>>>			max(Maxdate) ;
>>>		from Accord ;
>>>		into array DateFromTo
>>>	
>>>	Create Cursor Dates ( dDate D)
>>>	
>>>	for i = 0 to DateFromTo[2] - DateFromTo[1]
>>>		insert into Dates values ( DateFromTo[1] + m.i )
>>>	endfor
>>>	
>>>  && (3)
>>>  select	Accord.iresidentid, ;
>>>  			dDate, ;
>>>  			iid ;
>>>  		from Accord ;
>>>  				join Dates on dDate between MinDate and MaxDate ;
>>>  				left join Etats on ;
>>>  							( Accord.iresidentid = Etats.iresidentid ) ;
>>>  						and	( dDate between dDebut and dFin ) ;
>>>  		into cursor tmp ;
>>>  		order by 1, 2 ;
>>>  		having ( iId is null ) && if you leave this out, iId will be the corresponding entry in Etats
>>>
>>>
>>>>>Ok, donc si j'ai bien compris, tu as quelque part un table Accord par resident (Resident I, ddebut D, dFin D)
>>>>>
>>>>>Est-ce le cas ?
>>>>
>>>>Absolument
>>>>
>>>>
>>>>
>>>>>_________________
>>>>>>Gregory,
>>>>>>
>>>>>>cela va être plus simple à expliquer ...:)
>>>>>>
>>>>>>On a des accords de dépendances chez les mutuelles.
>>>>>>Etats.dbf
>>>>>>ddebut dfin iresident
>>>>>>
>>>>>>99 Fois sur 100 ces accords sont successifs et donc doivent se suivrent.
>>>>>>Avant de facturer aux mutuelles on doit vérifier 2 choses.
>>>>>>
>>>>>>1) Pas de "trous" entre les accords ( erreurs d'encodage )
>>>>>>
>>>>>>2) Pas deux accords identiques.....( cette qustion viendra demain ...:) )
>>>>>>
>>>>>>
>>>>>>1) Pas de trou
>>>>>>
>>>>>>INSERT INTO Etats VALUES ({^2005/01/08}, {^2005/03/30} , 1753 , 1 )
>>>>>>INSERT INTO Etats VALUES ({^2005/04/10}, {^2005/06/25} , 1753 , 2 )
>>>>>>
>>>>>>dans ce cas ci pour le residentid = 1753 on a les dates situées entre le 31/03/2005 et le 09/04/2005.....
>>>>>>
>>>>>>Est ce plus claire ?
>>>>>>
>>>>>>( je ne suis pas un modèle de pédagogie...:) )
>>>>>>
>>>>>>
>>>>>>bernhart
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>>Alors, explique-moi ce que tu veux - car la, je n'ai pas tres bien compris
>>>>>>>
>>>>>>>(1) les dates entre 08/01/2005 et 25/06/2005 pour tous les residents
>>>>>>>= select min(date), max(date)
>>>>>>>= min(date)/max(date) = minumum/maximum entree
>>>>>>>
>>>>>>>ou
>>>>>>>
>>>>>>>(2) les dates entre min/max date par resident en Etats
>>>>>>>= select resident, min(date), max(date) group by 1
>>>>>>>
>>>>>>>Quelles dates veux-tu pour le resident 2 ?
>>>>>>>_____________________________
>>>>>>>>Gregory,
>>>>>>>>
>>>>>>>>sorry for my poor english but my parents wanted that I study Hollands in place of English ...:)
>>>>>>>>
>>>>>>>>Please try this code , and see the ( bad ) result For iresidentid = 2
>>>>>>>>
>>>>>>>>Please help me , c'est noel et je dois m'occupper des enfants ....:)
>>>>>>>>
>>>>>>>>bernhart
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>CREATE CURSOR Etats (dDebut D, dFin D , iresidentid i , iid i )
>>>>>>>>
>>>>>>>>
>>>>>>>>  *-- je veux touver toutes les dates comprises entre le {^2005/01/08}
>>>>>>>>  *-- et le {^2005/06/25} pour le resident 1753
>>>>>>>>
>>>>>>>>  INSERT INTO Etats VALUES ({^2005/01/08}, {^2005/03/30} , 1753 , 1 )
>>>>>>>>  INSERT INTO Etats VALUES ({^2005/04/10}, {^2005/06/25} , 1753 , 2 )
>>>>>>>>  INSERT INTO Etats VALUES ({^2005/01/10}, {^2005/06/25} , 1754 , 3 )
>>>>>>>>  INSERT INTO Etats VALUES ({^2006/01/10}, {^2007/05/25} , 1756 , 4 )
>>>>>>>>  INSERT INTO Etats VALUES ({^2006/05/30}, {^2007/06/25} , 1756 , 5 )
>>>>>>>> INSERT INTO Etats VALUES ({^2001/01/08}, {^2003/03/30} , 2 , 6 )
>>>>>>>>
>>>>>>>>  && (1)
>>>>>>>>  && min and max dates:  entre le {^2005/01/08} et le {^2005/06/25} pour chaque resident
>>>>>>>>  SELECT MIN(dDebut)	AS	MinDate, ;
>>>>>>>>    MAX(dFin)	AS	Maxdate ;
>>>>>>>>    FROM Etats ;
>>>>>>>>    INTO CURSOR MinMax
>>>>>>>>
>>>>>>>>  && (2)
>>>>>>>>  SELECT DISTINCT iresidentid ;
>>>>>>>>    FROM Etats ;
>>>>>>>>    INTO CURSOR Resident ;
>>>>>>>>
>>>>>>>>  && (3)
>>>>>>>>  SELECT Resident.iresidentid, ;
>>>>>>>>    dDate, ;
>>>>>>>>    dDebut ;
>>>>>>>>    FROM Resident ;
>>>>>>>>    JOIN dDate ;
>>>>>>>>    ON ( dDate BETWEEN MinMax.MinDate AND MinMax.Maxdate ) ;
>>>>>>>>    LEFT JOIN Etats ON ;
>>>>>>>>    (	(Resident.iresidentid = Etats.iresidentid) ;
>>>>>>>>    AND	;
>>>>>>>>    ( dDate BETWEEN dDebut  AND dFin ) ;
>>>>>>>>    ) ;
>>>>>>>>    INTO CURSOR tmp ;
>>>>>>>>    HAVING ( dDebut IS NULL )
>>>>>>>>
>>>>>>>>
>>>>>>>> SET
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform