Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1549 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Requètes imbriquées ?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Requètes imbriquées ?

n°2269476
_pollux_
パリ居住者
Posté le 11-11-2015 à 10:53:11  profilanswer
 

Bonjour,

 

Je stocke une valeur environ toutes les 10 minutes tous les jours.
Je cherche à faire une requête pour récupérer la première valeur stockée comprise entre midi et 13 heures, entre deux dates données.
Je dois donc recevoir une liste des premières valeurs inscrites après midi chaque jour.

 

Je suis donc parti sur un truc du genre :

 
Code :
  1. SELECT * FROM table WHERE date BETWEEN '2000-01-01' and '2000-01-05' WHERE heure BETWEEN '12:00:00' AND '13:00:00' LIMIT 1;


Évidemment, c'est faux. Mais je ne vois pas trop comment faire correctement la requête :/

 

Si quelqu'un peut m'aider :jap:


Message édité par _pollux_ le 12-11-2015 à 09:53:50

---------------
Le topic du sport électronique@hfr : watch the l33t !
mood
Publicité
Posté le 11-11-2015 à 10:53:11  profilanswer
 

n°2269531
_pollux_
パリ居住者
Posté le 12-11-2015 à 09:53:02  profilanswer
 

J'ai commencé à regarder du côté des join in/right/left, mais je ne suis pas sûr d'y trouver mon bonheur.
 
C'est bizarre, le besoin semble plutôt simple et assez commun, mais je ne trouve pas de stratégie valable, ni d'exemple sur le net qui puisse correspondre...
 
:bounce:


---------------
Le topic du sport électronique@hfr : watch the l33t !
n°2269542
Pablo Escr​obarbe
En exil
Posté le 12-11-2015 à 12:18:39  profilanswer
 

Code :
  1. SELECT * FROM table WHERE date BETWEEN '2000-01-01' and '2000-01-05' AND heure BETWEEN '12:00:00' AND '13:00:00' LIMIT 1;


n°2269556
_pollux_
パリ居住者
Posté le 12-11-2015 à 15:28:48  profilanswer
 

Pablo Escrobarbe a écrit :

Code :
  1. SELECT * FROM table WHERE date BETWEEN '2000-01-01' and '2000-01-05' AND heure BETWEEN '12:00:00' AND '13:00:00' LIMIT 1;




Si c'est ça, j'suis très bête.
Mais le problème, c'est que la limite 1, elle va me retourner une seule valeur, non ? Or, je veux pour chaque jour cette première entrée entre 12h et 13h.


---------------
Le topic du sport électronique@hfr : watch the l33t !
n°2269565
_pollux_
パリ居住者
Posté le 12-11-2015 à 19:58:10  profilanswer
 

Bon, j'ai testé, ça ne me renvoie en effet que la première valeur trouvée (c'est à dire pour un seul jour).


---------------
Le topic du sport électronique@hfr : watch the l33t !
n°2269699
rufo
Pas me confondre avec Lycos!
Posté le 15-11-2015 à 12:25:47  profilanswer
 

POur se faciliter la vie, je te recommande, si tu peux, de faire un datetime comme type de champ plutôt que d'avoir un champ pour la date et un autre pour l'heure ;) DATE_FORMAT t'aidera si tu dois afficher que la date ou que l'heure.
 
Pour ce que tu veux faire, il faut effectivement faire une sous-requête et utiliser group by.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2269709
_pollux_
パリ居住者
Posté le 15-11-2015 à 17:34:15  profilanswer
 

rufo a écrit :

POur se faciliter la vie, je te recommande, si tu peux, de faire un datetime comme type de champ plutôt que d'avoir un champ pour la date et un autre pour l'heure ;) DATE_FORMAT t'aidera si tu dois afficher que la date ou que l'heure.

 

Pour ce que tu veux faire, il faut effectivement faire une sous-requête et utiliser group by.


Oui, merci pour le conseil du datetime, c'est ce que je pensais faire vu les quelques exemples que j'ai pu trouver.
Concernant la requêtes elle même, je n'ai pas encore eu le temps de revenir dessus, mais je compte bien y passer un peu de temps cette semaine :jap:


Message édité par _pollux_ le 15-11-2015 à 22:16:58

---------------
Le topic du sport électronique@hfr : watch the l33t !
n°2269710
Gwy
Posté le 15-11-2015 à 18:41:22  profilanswer
 

Tu ORDER BY 'heure', tu GROUP BY 'date' et ca fera l'affaire.
 
Pas besoin de limite, de jointures ou de requêtes imbriquées.

n°2269719
_pollux_
パリ居住者
Posté le 15-11-2015 à 22:18:49  profilanswer
 

Gwy a écrit :

Tu ORDER BY 'heure', tu GROUP BY 'date' et ca fera l'affaire.

 

Pas besoin de limite, de jointures ou de requêtes imbriquées.


euh... je vois pas du tout là.

 

Order by heure et groupe by Date, c'est un peu laisser mes données dans l'état où elles sont initialement.


Message édité par _pollux_ le 15-11-2015 à 22:19:06

---------------
Le topic du sport électronique@hfr : watch the l33t !
n°2269720
Gwy
Posté le 15-11-2015 à 22:42:50  profilanswer
 

Ce que tu veux c'est bien pour chaque jour distinct la première valeur à l'intérieur de ta plage horaire ?

mood
Publicité
Posté le 15-11-2015 à 22:42:50  profilanswer
 

n°2269723
_pollux_
パリ居住者
Posté le 16-11-2015 à 08:55:54  profilanswer
 

Gwy a écrit :

Ce que tu veux c'est bien pour chaque jour distinct la première valeur à l'intérieur de ta plage horaire ?


Oui, sur une certaine plage de jours.


---------------
Le topic du sport électronique@hfr : watch the l33t !
n°2269744
Gwy
Posté le 16-11-2015 à 12:09:38  profilanswer
 

Edit : J'ai dis une connerie, tu as bien besoin d'une requête intermédiaire car tu ne peux pas faire de GROUP BY après ton order...
 

Table test
-----------------------------------
 id   | time   | date   | value   |
-----------------------------------
 1    | 12     | 1      | a       |
 2    | 13     | 1      | b       |
 3    | 14     | 1      | c       |
 4    | 13     | 2      | d       |
 5    | 14     | 2      | g       |
 6    | 12     | 2      | z       |
 7    | 10     | 1      | y       |
-----------------------------------
 
SELECT sub.* FROM (SELECT * FROM `test` WHERE time > 11 AND time < 15 ORDER BY time ASC) AS sub GROUP BY sub.date
 
-----------------------------------
 id   | time   | date   | value   |
-----------------------------------
 1    | 12     | 1      | a       |
 6    | 12     | 2      | z       |
-----------------------------------


Message édité par Gwy le 16-11-2015 à 12:25:32
n°2269746
_pollux_
パリ居住者
Posté le 16-11-2015 à 12:54:19  profilanswer
 

ah, je check ça :)
 
Merci pour le temps passé en tout cas. :jap:


---------------
Le topic du sport électronique@hfr : watch the l33t !
n°2269748
_pollux_
パリ居住者
Posté le 16-11-2015 à 14:12:17  profilanswer
 

ça marche !  [:charlest]  
 
Merci pour l'aide ! Le seul truc que je comprends pas, c'est pourquoi ça ne me renvoie que la première occurrence trouvée entre les 2 heures fixées. :??:


---------------
Le topic du sport électronique@hfr : watch the l33t !
n°2269749
Gwy
Posté le 16-11-2015 à 14:21:39  profilanswer
 

Derien.
 
Ca c'est grace au group by.
Si tu veux le dernier enregistrement de la plage horaire il te suffit de changer l'ordre du tri dans la sous requête.


Message édité par Gwy le 16-11-2015 à 14:21:58
n°2269750
Pablo Escr​obarbe
En exil
Posté le 16-11-2015 à 14:22:16  profilanswer
 

Bah ton "Limit 1" fait ça non ?

n°2269753
_pollux_
パリ居住者
Posté le 16-11-2015 à 15:08:31  profilanswer
 

Pablo Escrobarbe a écrit :

Bah ton "Limit 1" fait ça non ?


Il n'y a plus de limit "1".
 
Par contre, effectivement, le GROUP BY ne récupère que la première occurrence pour chacune des dates (j'ai pas encore bien compris pourquoi, faut dire que je ne trouve pas d'explication précise de la fonction sur le net, que des exemples partiels). Comme elles sont classées dans l'ordre par heure ASC, ça fait le café.


---------------
Le topic du sport électronique@hfr : watch the l33t !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Requètes imbriquées ?

 

Sujets relatifs
Résultat d'une requête différent entre phpmyadmin et l'affichage[SQL] Jointure pour villes dans région
Aide pour finir - requete SQL avec search avec jointures[SQL] [facile] selection des données de plus de 256 lignes.
Passage de variables entre méthode imbriquéesinterroger plusieurs tables en une seule requete
[Résolu] [SQL Server/Cobol] Pb alim donnée dans un InsertErreur SQL ( Oracle ) 00936
[SQL newbie inside] changement de nom de domaine 
Plus de sujets relatifs à : [SQL] Requètes imbriquées ?


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR