Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Sql clause
Message
From
24/12/2005 08:58:08
 
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Title:
Environment versions
Visual FoxPro:
VFP 9
OS:
Windows XP SP2
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01080241
Message ID:
01080702
Views:
13
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
Gregory
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform