|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre expérimenté
![]() Inscription : août 2005 Messages : 1 108 ![]() |
Bonjour.
J'ai une table avec 2 colonnes : date_time (datetime) et value (int) Code :
Code :
Quelle requête peut me retourner ce résultat svp ? Merci d'avance, Cordialement
__________________
développeur en folie cherche à ... développer encore plus |
||||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
MySql n'est pas le SGBD le plus adapté pour ce genre de requête car il ne connaît pas les fonctions analytiques, notamment LAG. Il faut donc passer par quelque chose de moins perfomant.
J'ai quand même un doute sur la validité de ma requête car je pense que t1.date_time dans la ligne : where t3.date_time < t1.date_time est un peu bas (2 niveaux de requêtes corrélées, il me semble que c'est trop bas). J'ai testé sur oracle en évitant les fonctionnalités spécifiques, et la requête a fonctionné, donc je propose quand même la solution. Mais je ne sais pas si elle fonctionnera sur MySql car même sur Oracle je trouve étrange qu'elle ait fonctionné... Code :
Ca devrait donc aussi fonctionner sur MySql. |
||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Bon finalement je ne suis pas sûr que ça fonctionne sur MySql...
D'après un expert Oracle ma requête ne devrait pas forcément fonctionner sur Oracle même si elle fonctionne... Peux tu nous faire un retour sur MySql stp ? ou quelqu'un peut il tester ? Attention même si elle fonctionne sur MySql aujourd'hui, il est peut être possible que ça change dans les versions à venir, il faudrait pour en être sûr avoir l'avis d'un expert MySql ou d'un expert SQL ANSI. |
|
|
00
|
|
|
#4 |
|
Membre expérimenté
![]() Inscription : août 2005 Messages : 1 108 ![]() |
Bonjour.
Et bien même si elle n'est pas censé fonctionner, elle fait parfaitement ce que j'attends d'elle Le résultat correspond tout à fait à mes attentes. Merci de ton aide
__________________
développeur en folie cherche à ... développer encore plus |
|
|
00
|
|
|
#5 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Le risque de cette requête est
1) qu'elle plante s'il y a des doublons (une des sous requêtes introduite par "WHERE date_time = (" peut retourner de multiples valeurs) 2) qu'elle ne fournisse pas le bon résultat après correction de 1). Il n'y a pas de véritables solutions de remplacement aux fonctions analytiques comme le ranking, la numérotation ou LEAD et LAG.... Sans compter que les temps de réponse sont catastrophique en comparaisons à une solution avec ces fonctions... A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#6 | |
|
Membre expérimenté
![]() Inscription : août 2005 Messages : 1 108 ![]() |
Citation:
__________________
développeur en folie cherche à ... développer encore plus |
|
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Effectivement, je n'avais pas pensé au doublon.
doudouallemand, pour être sûr que ça ne plantera pas dans ton cas précis tu peux rajouter une contrainte d'unicité sur date_time comme ça tu sera sûr que : Code :
Sinon, donc à priori pas de contre-indication de la norme sur l'utilisation de t1.date_time dans WHERE t3.date_time < t1.date_time. Merci de ton retour SQLPro. |
||
|
|
00
|
|
|
#8 |
|
Membre expérimenté
![]() Inscription : août 2005 Messages : 1 108 ![]() |
Petit complément : si je souhaite que sur les dates, ce ne soit plus entre lignes mais entre la première valeur d'une journée et la dernière valeur de cette journée, pour tous les jours présents, je dois modifiés comment la requête svp ?
Dans mon exemple ci-dessous, on fera aura donc une seule ligne de retour qui fera la différence entre la valeur de 20h (1ère de la journée) et la valeur de 20h45 (dernière de la journée). Merci
__________________
développeur en folie cherche à ... développer encore plus |
|
|
00
|
|
|
#9 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Ben à priori dans ce cas c'est beaucoup plus simple, il suffit de faire la différence entre la date min et la date max par jour, non ?
Code :
|
||
|
|
00
|
|
|
#10 |
|
Membre expérimenté
![]() Inscription : août 2005 Messages : 1 108 ![]() |
Merci de ta réponse.
Cordialement
__________________
développeur en folie cherche à ... développer encore plus |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com