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

[Fermé]
Signaler
Messages postés
1096
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
31 août 2017
-
Messages postés
1096
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
31 août 2017
-
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

Messages postés
16905
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
24 septembre 2021
901
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Messages postés
1096
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
31 août 2017
215
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 ?
Messages postés
16905
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
24 septembre 2021
901 >
Messages postés
1096
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
31 août 2017

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/
Messages postés
1096
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
31 août 2017
215 >
Messages postés
16905
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
24 septembre 2021

Merci encore, je ne connaissais pas cette forme d'écriture du JOIN.
Je m'empresse de lire ce lien.

Merci ;)