requete sql complexe - SQL/NoSQL - Programmation
Marsh Posté le 01-03-2006 à 13:55:59
ReplyMarsh Posté le 01-03-2006 à 14:12:48
anapajari a écrit : t'as écrit quoi pour l'instant? |
pour l'instant j'ai écrit ça:
Code :
|
Le problème c'est que là entre 10/1/2005 et 19/01/2005
si ya ça dans la table :
bug_id----date_modified------------- old_value--------- new_value
12--------13/01/2005 19:26:28------ 10----------------80
12--------18/01/2005 17:38:15------80----------------45
12--------18/01/2005 17:39:37------ 45----------------90
12--------18/01/2005 17:39:59------ 90----------------80
12--------18/01/2005 17:50:28------ 80----------------90
il me donne bien la date 18/01/2005 17:39:37 qui correspond au premier 80 ou 90
par contre si j'ai ça:
bug_id----date_modified------------- old_value--------- new_value
12--------13/01/2005 19:26:28------ 10----------------80
12--------18/01/2005 17:38:15------80----------------45
12--------18/01/2005 17:39:37------ 45----------------90
12--------18/01/2005 17:39:59------ 90----------------10
12--------18/01/2005 17:50:28------ 10----------------40
il va quand meme me renvoyer 18/01/2005 17:39:37 alors que moi je veux qu'il ne me renvoi rien, je ne veux pas qu'il me compte le bug car il finit par un 40
Marsh Posté le 02-03-2006 à 09:44:54
Essaye quelquechose comme ça :
Code :
|
edit : exemple sous Oracle, à adapter pour un autre SGBD.
Marsh Posté le 02-03-2006 à 09:54:02
Beegee a écrit : Essaye quelquechose comme ça :
|
c'est très bien pour le premier exemple mais pas pour le deuxième malheureusement.
En fait il faut que entre le 29/07/2005 et le 06/02/2006 je récupère '17/01/2006 16:44:08' et non 18/08/2005 18:29:47
Code :
|
il ne faut pas que je récupère le premier 80 mais le premier avant le dernier
80
40
50
80
90
je récupère le 4ème
80
40
80
90
80
je récupère le 3ème
80
50
90
je récupère le dernier.
Marsh Posté le 02-03-2006 à 10:36:36
l'avant-dernier s'il y en a 2 consécutifs en fin de chaine, sinon le dernier ... je vais regarder.
Marsh Posté le 02-03-2006 à 10:37:25
ou l'avant avant dernier si yen a 3 consécutifs, etc ...
c'est compliqué :-(
Marsh Posté le 02-03-2006 à 11:44:41
ah ok, la première date_modified pour les new_value consecutives et contenant 80 ou 90 ...
donc il faut exclure les résultat tels qu'il existe une ligne à une date supérieure avec un new_value étant ni 80 ni 90.
Essaye ça pour voir :
Code :
|
Marsh Posté le 02-03-2006 à 11:51:35
oui voilà si ya cette suite là par exemple:
20 => 01/02/2005
40 => 02/02/2005
80 => 03/02/2005
90 => 04/02/2005
30 => 05/02/2005
60 => 06/02/2005
80 => 07/02/2005
90 => 08/02/2005
80 => 09/02/2005
90 => 10/02/2005
si c'est sur 01/2005 alors il faut que je récupère 80 => 07/02/2005
si c'est du 01 au 05/02/2005 il faut que je ne récupère rien car ça se finit pas par 80 ou 90
si c'est du 01 au 04/02/2005 et bien je récupère 80 => 03/02/2005
si c'est du 01 au 03/02/2005 et bien je récupère 80 => 03/02/2005
c'est difficile à expliquer ...
Marsh Posté le 02-03-2006 à 11:52:24
isa21493 a écrit : |
oups sur 02/2005 pardon
Marsh Posté le 02-03-2006 à 12:35:26
tu as essayé la nouvelle requête que je t'ai donnée plus haut ?
Marsh Posté le 02-03-2006 à 12:44:03
sous access la requete donne ça:
Code :
|
mais j'ai une erreur:
"Type de données incompatibles dans l'expression du critère"
Marsh Posté le 02-03-2006 à 12:45:34
Code :
|
Marsh Posté le 02-03-2006 à 12:48:13
tu dois avoir un problème dans la réécriture pour Access, sour Oracle ma requête marche.
Marsh Posté le 02-03-2006 à 13:16:37
en fait ma requete 3 est pas une table mais une requete.
donc j'ai essayé de l'intégrer dans ta formule mais ça ne marche pas,
il dit qu'il ne trouve pas la table (select ...
Code :
|
Marsh Posté le 03-03-2006 à 15:38:07
j'arrive vraiment pas à transformer la requete de oracle à access
Marsh Posté le 01-03-2006 à 13:49:04
Bonjour à tous,
voici ma table:
bug---------date_modified-----------------old_value------new_value
140---------01/02/2005 14:36:54---------10--------------15
140---------02/02/2005 09:50:16---------15--------------20
140---------02/02/2005 12:07:36---------20--------------30
140---------02/02/2005 17:44:15---------30--------------20
140---------03/02/2005 13:43:23---------20--------------30
140---------22/02/2005 11:09:37---------30--------------45
140---------24/02/2005 18:33:05---------45--------------80
140---------04/03/2005 12:23:50---------80--------------90
140---------29/03/2005 15:05:40---------90--------------20
140---------29/03/2005 15:05:50---------20--------------15
140---------29/03/2005 15:11:25---------15--------------20
140---------09/06/2005 16:42:45---------20--------------30
140---------15/06/2005 11:39:25---------30--------------20
140---------29/06/2005 11:18:17---------20--------------30
140---------29/07/2005 10:12:38---------30--------------45
140---------18/08/2005 18:29:47---------45--------------80
140---------10/10/2005 12:17:49---------80--------------45
140---------20/10/2005 11:24:58---------45--------------40
140---------20/10/2005 11:25:20---------40--------------45
140---------17/01/2006 16:44:08---------45--------------80
140---------06/02/2006 10:15:46---------80--------------90
voici ce que je voudrais faire:
je voudrais, pour une plage de date donnée, regarder si le bug est en 80 ou en 90 à la fin de la plage de date.
donc pour
140---------22/02/2005 11:09:37---------30--------------45
140---------24/02/2005 18:33:05---------45--------------80
140---------04/03/2005 12:23:50---------80--------------90
140---------29/03/2005 15:05:40---------90--------------20
je ne veux pas récupérer le bug
par contre pour
140---------22/02/2005 11:09:37---------30--------------45
140---------24/02/2005 18:33:05---------45--------------80
140---------04/03/2005 12:23:50---------80--------------90
je veux récupérer le bug
mais, si je récupère le bug il me faut la date la plus ancienne pour 80 et 90, c'est à dire que si le bug est 80 puis 90 je dois récupérer la date du premier (80)
ex:
140---------22/02/2005 11:09:37---------30--------------45
140---------24/02/2005 18:33:05---------45--------------80
140---------04/03/2005 12:23:50---------80--------------90
je récupère 24/02/2005
meme chose si:
140---------22/02/2005 11:09:37---------30--------------45
140---------24/02/2005 18:33:05---------45--------------80
140---------03/03/2005 12:23:50---------80--------------90
140---------04/03/2005 12:23:50---------90--------------80
je veux récupérer 24/02/2005
et tout ceci dans une requete SQL .
résumé:
sur une durée donnée, si la dernière date_modified n'a pas une new_value à 80 ou 90 alors je ne compte pas le bug_id dans mon nombre de bug
si par contre la new_value est à 80 ou 90 alors il faut que je regarde si la new_value d'avant est à 80 ou 90 et si la new value d'avant avant est à 80 ou 90 ... et prendre la date_modified du tout premier 80 ou 90
Merci de votre aide.