Extraires heures de timestamp + calculs de moyenne sur résultat

phenetas Messages postés 1108 Date d'inscription   Statut Membre Dernière intervention   -  
phenetas Messages postés 1108 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai plusieurs tables sur une base SQL :
  • Une table enregistre des evenements qui se passent sur des machines, avec une colonnes "timestamp", et une colonnes "id_machine"
  • Une table enregistre le pays des machines, avec une colonnes "id_machine" et une "pays"



Mon but est d'extraire les timstamp des evenements, et de voir en moyenne (résumé par heure de la journée par exemple) à quelle heure ces evenements arrivent en fonction du pays de la machine.

Ex :
table "event" (id | timestamp | id_machine)
1 | 2014-11-24 13:06:47 | A
2 | 2014-11-24 13:06:47 | A
3 | 2014-11-24 13:06:47 | B
4 | 2014-11-24 13:06:47 | C

table "machine" (pays | id_machine)
FR | A
US | B
IT | C


Pour cet exemple, mon but serait d'obtenir en sortie un tableau, qui montre par pays et par heure de la journée (de 0 à 24), le nombre d'evenements.
Comme ça, ensuite je pourrais extraire ce tableau et faire un affichage graphique depuis excel ou n'importe quel autre outil du genre.

heures / pays

______FR_____US______IT
0_____2______3_______2
1_____0______9_______3
2_____3______2_______1
[...]
22____4______3_______2
23____8______3_______4
24____2______3_______1




Ce que je ne sais pas faire et me pose problème :

1) Comment extraire facilement l'heure de la journée depuis un timestamp sous ce format : 2014-11-24 13:06:47 ?

2) Comme ça, de mon esprit débutant, je pense qu'il va falloir utiliser un JOIN pour croiser les 2 tables (la table des evenements et la table des machines). Mais je ne suis pas sur que ce soit la meilleure solution ?



Merci pour toute aide, qui sera accueillie avec plaisir.


1 réponse

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonsoir,
select hour(timestamp)
ne fonctionne pas?
et ceci?
select hour(timestamp), pays, count(*) from
event, machine
where event.id_machine = machine.id_machine
group by hour(timestamp), pays
order by pays, hour(timestamp);
1
phenetas Messages postés 1108 Date d'inscription   Statut Membre Dernière intervention   227
 
Merci énormément yg_be, ça fonctionne très bien.

J'ai du m'embrouiller dans mes recherches car je n'étais pas tombé sur la fonction hour().

Concernant le FROM, je vois que tu cite les deux tables avec une virgule entre les deux.
Cette solution est bien plus simple que ce que je pensais (utiliser un JOIN). Du coup cela me mène à une question : dans quel cas un JOIN est-il préférable à la solution que tu m'as apportée ici ?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > phenetas Messages postés 1108 Date d'inscription   Statut Membre Dernière intervention  
 
en fait, c'est un INNER JOIN, exprimé autrement. tu avais donc tout à fait raison de penser à un JOIN.
j'aurais pu écrire:
select hour(timestamp), pays, count(*) from
event join machine
on event.id_machine = machine.id_machine
group by hour(timestamp), pays
order by pays, hour(timestamp);

je pense que la base de données doit être assez intelligente pour traiter les deux requêtes de la même façon, donc je choisis de l'écrire de la façon la plus simple pour moi.
ceci t’intéressera peut-être : https://sqlpro.developpez.com/cours/sqlaz/jointures/
0
phenetas Messages postés 1108 Date d'inscription   Statut Membre Dernière intervention   227 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Merci encore, je ne connaissais pas cette forme d'écriture du JOIN.
Je m'empresse de lire ce lien.

Merci ;)
0