Requête MYSQL avec Where un peu complexe

Requête MYSQL avec Where un peu complexe - SQL/NoSQL - Programmation

Marsh Posté le 30-12-2013 à 19:26:05    

Salut à tous,
 
Je suis en train de me casser la tête sur une requête SQL. J'ai une table avec des température tt les 5min et avec l'heure et la date dedans.
 
Je voudrais récupérer les dernier 24h uniquement dans ma requête.
 
Je suis arrivé à faire 2 requettes qui font se que je veux faire au final mais je voulais savoir si il n'etait pas possible de faire la même chose en une?
 

Code :
  1. SELECT * FROM temperature WHERE date='29/12/2' AND heure >= '16:00:00'
  2. SELECT * FROM temperature WHERE date='30/12/2' AND heure <= '16:00:00'


 
Merci de votre aide.

Reply

Marsh Posté le 30-12-2013 à 19:26:05   

Reply

Marsh Posté le 30-12-2013 à 19:42:41    

T'as pas l'instruction OR ?

Reply

Marsh Posté le 30-12-2013 à 20:44:30    


 
 
Pourquoi OR?
 
Il faut que je récupère toutes les données entre le 29/12/2013 à partir de 16h jusqu'au 30/12/2013 jusqu'a 16h.

Reply

Marsh Posté le 30-12-2013 à 20:52:41    

Ah pardon, j'ai pas tout imprimé.
 
BETWEEN alors.

Reply

Marsh Posté le 30-12-2013 à 21:39:48    

hppp a écrit :

Salut à tous,
 
Je suis en train de me casser la tête sur une requête SQL. J'ai une table avec des température tt les 5min et avec l'heure et la date dedans.
 
Je voudrais récupérer les dernier 24h uniquement dans ma requête.
 
Je suis arrivé à faire 2 requettes qui font se que je veux faire au final mais je voulais savoir si il n'etait pas possible de faire la même chose en une?
 

Code :
  1. SELECT * FROM temperature WHERE date='29/12/2' AND heure >= '16:00:00'
  2. SELECT * FROM temperature WHERE date='30/12/2' AND heure <= '16:00:00'


 
Merci de votre aide.


Sérieusement ? Date et heure dans deux champs séparés ?
 
Si le schéma n'est pas définitif, passer à du datetime ne ferait pas de mal et permettrait un simple SELECT * FROM temperature WHERE date_mesure BETWEEN '2002-12-29 16:00:00' AND '2002-12-30 16:00:00' voire pour faire sa feignasse SELECT * FROM temperature WHERE date_mesure BETWEEN NOW() - INTERVAL 24 HOUR AND NOW()


---------------
Main/Alt1/Alt2/Alt3
Reply

Marsh Posté le 30-12-2013 à 21:44:17    

Volkhen a écrit :


Sérieusement ? Date et heure dans deux champs séparés ?
 
Si le schéma n'est pas définitif, passer à du datetime ne ferait pas de mal et permettrait un simple SELECT * FROM temperature WHERE date_mesure BETWEEN '2002-12-29 16:00:00' AND '2002-12-30 16:00:00' voire pour faire sa feignasse SELECT * FROM temperature WHERE date_mesure BETWEEN NOW() - INTERVAL 24 HOUR AND NOW()


 
Oui j'y avais pensé, je crois que je vais voir pour mettre la date et l'heure dans le même champs.
 
Merci  :jap:

Reply

Marsh Posté le 02-01-2014 à 13:50:43    

c'est vrai une zone timestamp(ou datetime) serait le plus cool ... mais bon, tu ne dois pas l'avoir si tu demandes ça ...
sinon  
1.SELECT * FROM temperature WHERE  
(date='29/12/2' AND heure >= '16:00:00') // tu selectionnes les enregistrements du 29 après 16h
 or  
(date='30/12/2' AND heure <= '16:00:00') // tu sélectionnes les enregistrements du 30 avant 16h
 
Pour la valeur de ta date , tu peux mettre now() and now() -1 day, au cas où
 
Tu as aussi la possibilité de faire un union entre tes 2 requêtes... ce qui peut être pas mal... mais pas des plus performants (à exécuter, ni à maintenir)
SELECT * FROM temperature WHERE date='29/12/2' AND heure >= '16:00:00'
union
SELECT * FROM temperature WHERE date='30/12/2' AND heure <= '16:00:00' ;
 
 
 
 
 


Message édité par gpl73 le 02-01-2014 à 14:07:24
Reply

Marsh Posté le 02-01-2014 à 14:49:08    

+1 pour un champ unique de type timestamp pour avoir la date et heure et +1 pour BETWEEN.
Par ailleurs, la fonction DATE_FORMAT() pourra t'aider en cas de besoin de traiter uniquement avec la partie date ou la partie heure ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 30-01-2014 à 14:50:57    

Salut.
Et pourquoi pas avec un DESC sur le champ date?
Les dernières 24h correspondent aux (24 x 12*) derniers enregistrements.
(*12 enregistrement par heure: 12h00, 12h05, 12h10, ..., 12h55)
 
On aurait donc:
SELECT * FROM TEMPERATURE ORDER BY DATE DESC LIMIT 0, 264;
 
Mais je dis peut être une connerie si tu recherches pas les dernières 24 heures "glissantes".


Message édité par Nirm le 30-01-2014 à 14:51:53
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed