Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1479 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Date interval debut - fin

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Date interval debut - fin

n°1563551
moineaux44​76
Posté le 22-05-2007 à 15:50:00  profilanswer
 

bonjour,
Mon probleme est très simple et en même temp assez compliqué pour rester dans un temp correct de traitement.
J'ai une table d'ouverture/fermeture de lit dans un hopital :
IULIT --- DATE -- MOTIF
1 --- 12/05/07 -- ouvert
1 --- 17/05/07 -- ferme
1 --- 22/05/07 -- ouvert
 
J'aimerais passé cette table sous la forme
IULIT ---date debut --- date fin --- motif
1 --- 12/05/07 --- 17/05/07 --- ouvert
1 --- 17/05/07 --- 22/05/07 --- ferme
1 --- 12/05/07 --- 31/12/99 ou vide --- ouvert
 
j'ai essayé avec mes propres connaissance en SQL mais cela donne une usine à gaz   :pt1cable:  
Quelqu'un peux t'il m'aider ?
Merci d'avance.

mood
Publicité
Posté le 22-05-2007 à 15:50:00  profilanswer
 

n°1563558
MagicBuzz
Posté le 22-05-2007 à 15:55:40  profilanswer
 

Pas de solution miracle. Celle que tu as mis en place et qui ressemble à une usine à gaz me semble la plus simple...
 
=> Jointure de la table sur elle-même avec "t1.date deb < select min(2.datdeb) where t2.datedeb > t1.datdeb"

n°1563597
moineaux44​76
Posté le 22-05-2007 à 16:34:48  profilanswer
 

Sans vouloir faire le gars trop chiant mais je dois me planter quelque part, est il possible d'avoir la requete en "entier" ?
J'ai essayer en reprenant ton bout de requete mais ya un truc qui "coince"...


Message édité par moineaux4476 le 22-05-2007 à 16:35:19
n°1563609
LePhasme
Les Belges domineront le monde
Posté le 22-05-2007 à 16:52:37  profilanswer
 

Pourquoi tu te contente pas de mettre la date de debut/fin quand il est "ouvert", avec ca tu peux déduire facilement quand il est "fermé".

n°1563663
MagicBuzz
Posté le 22-05-2007 à 17:58:06  profilanswer
 

je te poste un truc ce soir, là gigot d'agneau


Message édité par MagicBuzz le 22-05-2007 à 17:58:16
n°1563706
MagicBuzz
Posté le 22-05-2007 à 19:19:39  profilanswer
 

Après réflexion rapide, je crois que j'ai trouvé bien plus simple que ce que j'ai dit. A vérifier :
 
Requête 1 :
 

Code :
  1. SELECT t1.iulit, t1.date, min(t2.date), t1.motif
  2. FROM matable t1
  3. LEFT OUTER JOIN matable t2 ON t2.iulit = t1.iulit AND t2.date > t1.date
  4. WHERE t1.iulit = 1 --parceque dans ton exemple y'a que des 1 ;)
  5. GROUP BY t1.iulit, t1.date, t1.motif


 
En fait, à première vue, cette requête toute bête devrait marcher ;)

n°1563745
casimimir
Posté le 22-05-2007 à 22:20:47  profilanswer
 

sachant que si tu es sur un sgbd un peu correct tu dois avoir des fonctions analytiques qui te permettent de faire ca sans trop te casser le derriere, genre en oracle, je bosse quasi exclusivement la dessus donc je ne connais pas les autres, mais ca m'etonnerait que mssql n'ait pas un truc du genre.
 

Code :
  1. select iulit,
  2.          statut,
  3.          ta_date date_de_debut,
  4.          lead(ta_date)over(partition by iulit order by ta_date) date_de_fin
  5. from ta_table


 
en gros tu definis une clause de fenetrage, ce qui correspond a toutes tes lignes ayant le meme iulit, il va trier ses fenetres suivant ton critere, et aller rechercher le suivant. Une fois qu'on a gouté a ca difficile de s'en passer
 
marrant je bosse aussi dans un hosto, tu dois sortir des stats sur des unités de soin?

n°1563774
moineaux44​76
Posté le 23-05-2007 à 08:21:33  profilanswer
 

bonjour à tous, je m'en vais tester vos solutions, je vous tiens au courant.
 
Ps:casimir, oui c'est pour les unité de soins mais aussi pour tous les autres service de l'hôpital (finance,drh,etc...)
PS: Lephasme, c'est parce que il n'y a pas que les etats ouvert et fermé.

n°1563809
moineaux44​76
Posté le 23-05-2007 à 10:16:32  profilanswer
 

ça y est, merci bien.
 
solution retenu : MagicBuzz, simple et efficace.
 
Casimimir, je ne connaissais pas les fonctions analytiques et il est vrai que ça m'a l'air très efficace, malheuresement elle ne fonctionne pas dans mon cas. Je ne sais pas pourquoi, peut être en rapport avec mon lien odbc sur ma base db2, mais en tous cas la solution de magicbuzz fonctionne bien donc pas la peine de chercher plus loin...
 
++

n°1563836
casimimir
Posté le 23-05-2007 à 11:05:54  profilanswer
 

ha ben on doit quasiment faire le même job alors ^^

mood
Publicité
Posté le 23-05-2007 à 11:05:54  profilanswer
 

n°1563851
MagicBuzz
Posté le 23-05-2007 à 11:24:48  profilanswer
 

En fait, c'est le gars assi à côté de toi si ça se trouve :D

n°1564351
Alisteroid
Posté le 23-05-2007 à 23:37:59  profilanswer
 

Ou alors le SGBD qui lui parle  [:barthaliastoxik]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Date interval debut - fin

 

Sujets relatifs
[SQL] select avec date[PHP]Champ Date
Debut ...Formatage d'une date en francais déja extraite
Problème avec l'insertion d'une dateTracer une cubique mais pas revenir au début [Image illustration]
comparer une liste de date sql avec la date todayDate et semaines avec PHP
$date = new Date??()Ligne en rouge à une certaine date d'échéance
Plus de sujets relatifs à : Date interval debut - fin


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR