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

Fermé
phenetas Messages postés 1096 Date d'inscription mercredi 25 juillet 2007 Statut Membre Dernière intervention 31 août 2017 - 13 mars 2017 à 18:25
phenetas Messages postés 1096 Date d'inscription mercredi 25 juillet 2007 Statut Membre Dernière intervention 31 août 2017 - 14 mars 2017 à 18:51
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié par yg_be le 13/03/2017 à 22:17
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 1096 Date d'inscription mercredi 25 juillet 2007 Statut Membre Dernière intervention 31 août 2017 224
Modifié par phenetas le 14/03/2017 à 14:54
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > phenetas Messages postés 1096 Date d'inscription mercredi 25 juillet 2007 Statut Membre Dernière intervention 31 août 2017
Modifié par yg_be le 14/03/2017 à 18:26
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 1096 Date d'inscription mercredi 25 juillet 2007 Statut Membre Dernière intervention 31 août 2017 224 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
14 mars 2017 à 18:51
Merci encore, je ne connaissais pas cette forme d'écriture du JOIN.
Je m'empresse de lire ce lien.

Merci ;)
0