Bonjour,
J'ai une problématique au boulot bien austère, que je préfère vous illustrer en prenant exemple sur un jeu :
Prenez une table joueur avec id,debut et fin
une table paysan avec id, statut, debut et fin
une table mage avec id,statut, debut et fin
une table guerrier avec id,statut,debut et fin
Le joueur 4 arrive le 01/01/2012 et part le 31/12
Il est dans la table paysan du 07/05 au 30/06, dans la table mage du 01/07 au 30/09, dans la table guerrier du 01/10 au 04/11.
On aimerait dans une vue pouvoir lire à son sujet
4 joueur 01/01 06/05
4 paysan 07/05 30/06
4 mage 01/07 30/09
4 guerrier 01/10 04/11
4 joueur 05/11 31/12
Avec autant de tuples que de statut (ou non statut=joueur) sur une période. Dans tous les cas, on veut couvrir l'année du 01/01 au 31/12.
J'ai essayé ceci, mais bien sûr, les dates pour joueur ne sont pas bonnes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 select joueur.id,"joueur" as statut,joueur.debut,joueur.fin from joueur where joueur.fin>="2012-01-01" and joueur.debut<="2012-12-31" union select paysan.id,paysan.statut,paysan.debut,paysan.fin from joueur inner join paysan on joueur.id=paysan.id and joueur.fin>=paysan.debut and joueur.debut<=paysan.fin where joueur.fin>="2012-01-01" and joueur.debut<="2012-12-31" union select mage.id,mage.statut,mage.debut,mage.fin from joueur inner join mage on joueur.id=mage.id and joueur.fin>=mage.debut and joueur.debut<=mage.fin where joueur.fin>="2012-01-01" and joueur.debut<="2012-12-31" union select guerrier.id,guerrier.statut,guerrier.debut,guerrier.fin from joueur inner join guerrier on joueur.id=guerrier.id and joueur.fin>=guerrier.debut and joueur.debut<=guerrier.fin where joueur.fin>="2012-01-01" and joueur.debut<="2012-12-31" group by id,statut,debut,fin
Partager