Bonjour à tous,
Je me permets de venir parler d'un petit problème existentiel. Je cherche à dénombrer des éléments suivant une date bien précise (paramètre) et suivant la valeur d'une propriété particulière (fixée).
Ça permet de répondre à la question "Combien y-en avait-il possédant tel ou tel statut à telle ou telle date?".
La requête ne concerne qu'une seule table qui possède les champs suivant :
-id : Identifiant de l'enregistrement (auto_increment, PRIMARY INDEX)
-create_time (VARCHAR(30)) : Date de création de l'enregistrement sous la forme d'un timestamp UNIX.
-remove_time (VARCHAR(30)) : Date de suppression du jeu de données sous la forme d'un timestamp UNIX.
-status_id (INT) : Le statut de l'enregistrement. N valeurs quelconques (la liste des valeurs possibles peut varier d'un enregistrement à un autre).
-TOSTATUS_N_TIME (VARCHAR(30)) : Date de passage à la valeur "N" du champ status_id. Si il y a les 3 valeurs possibles {"1", "2", "3"} pour tel ou tel enregistrement, on utilisera les champs TOSTATUS_1_TIME, TOSTATUS_2_TIME et TOSTATUS_3_TIME.
La liste totale des statuts est connue à l'avance mais tous les enregistrements ne sont pas censés utiliser tous les statuts.
On est donc capable de déterminer les intervalles pendant lesquels le champ status_id a pris telle ou telle valeur.
La difficulté reviens à reconstituer cette valeur puisque status_id contient la valeur correspondant à l'instant où la requête est faite et non à l'instant qui nous intéresse.
J'ai tenté de faire l'ébauche d'une requête que voici :
Mais je ne suis pas sur que ce soit bien correct. "SELECT ..... ?????? ....." étant une requête imbriquée (dont j'aimerai bien me passer si possible) qui permettrait de reconstituer la valeur du champ status_id prise à %TIME_RECHERCHE%, temps fixé pour la recherche en tant que paramètre.Code:
1
2
3
4
5
6
7
8
9
10
11 SELECT COUNT(*), ( SELECT ..... ?????? .....) AS old_status_id FROM ma_table WHERE create_time <= %TIME_RECHERCHE% AND ( remove_time IS NULL OR remove_time > %TIME_RECHERCHE% ) GROUP BY old_status_id
Je précise que je souhaite éviter les solutions du genre "N valeurs -> N requêtes" et que je travaille sous MySQL 5
Est-ce que quelqu'un aurait une idée sur la meilleure manière de procéder. Peut-être que mon modèle de données n'est pas adapté pour cette utilisation mais sa remise en question n'est réellement pas souhaitable :)
Merci par avance, bonne journée.