je me torture l'esprit pour optimiser les temps de calculs sur une requête,
et
j'aimerais votre avis sur la question.
j'ai une table qui contient les relevés kilométriques de véhicules, et je
veux rechercher
les discontinuités :
table km_mesures :
id : clé de la table, identifiant unique du relevé
vehicule : numéro du véhicule
date_releve : date et heure du relevé
code_activite : code indiquant de qu'a fait le véhicule
kmd : kilométrage début
kmf : kilométrage fin
je cherche à faire une procédure stockée qui
me renvoie les discontinuités dans les relevés kilométriques.
enregistrement id=9898 : le 20/01 pour le véhicule 300, kmf vaut 50000
enregistrement id =9956 : le 21/01 pour le véhicule 300, kmd vaut 50010
il y a donc 10 km non justifiés, il faudrait renvoyer :
300 / 9898 / 9956 / 10
je l'ai fait à l'aide d'un recordset que je balaye dans mon code mais
la table commence à avoit plusieurs milliers d'enregistrements et cela
devinent très lent.
avez vous une idée pour accélérer le bazar ?
pensez-vous qu'en utilisant une procédure stockée avec un curseur cela ira
plus vite qu'avec mon code VB ? encore mieux, peut-on éviter le curseur ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Synopsis
Cette requete te donne pour chacun des releves, le kilometrage de début du releve suivant : colonne kms
select a.id , a.vehicule , a.date_releve , a.code_activite , a.kmd , a.kmf , ( select b.kmd from releve b where b.vehicule = a. vehicule and b.date_releve ( select min(c.date_releve) from releve as c where c.vehicule = a.vehicule and c.date_releve>a.date_releve ) ) as kms from releve as a
Tu crée ta vue.
Ensuite
select * from maVue where kmf <> kms
Tu as obtiens l'ensemble de tes discontinuités.
"denis" a écrit dans le message de news:%
Bonjour à tous,
je me torture l'esprit pour optimiser les temps de calculs sur une
requête,
et j'aimerais votre avis sur la question. j'ai une table qui contient les relevés kilométriques de véhicules, et je veux rechercher les discontinuités :
table km_mesures : id : clé de la table, identifiant unique du relevé vehicule : numéro du véhicule date_releve : date et heure du relevé code_activite : code indiquant de qu'a fait le véhicule kmd : kilométrage début kmf : kilométrage fin
je cherche à faire une procédure stockée qui me renvoie les discontinuités dans les relevés kilométriques. enregistrement id98 : le 20/01 pour le véhicule 300, kmf vaut 50000 enregistrement id 56 : le 21/01 pour le véhicule 300, kmd vaut 50010 il y a donc 10 km non justifiés, il faudrait renvoyer :
300 / 9898 / 9956 / 10
je l'ai fait à l'aide d'un recordset que je balaye dans mon code mais la table commence à avoit plusieurs milliers d'enregistrements et cela devinent très lent.
avez vous une idée pour accélérer le bazar ? pensez-vous qu'en utilisant une procédure stockée avec un curseur cela ira plus vite qu'avec mon code VB ? encore mieux, peut-on éviter le curseur ?
merci beaucoup
Denis
Cette requete te donne pour chacun des releves,
le kilometrage de début du releve suivant : colonne kms
select
a.id
, a.vehicule
, a.date_releve
, a.code_activite
, a.kmd
, a.kmf
, (
select b.kmd
from releve b
where b.vehicule = a. vehicule
and b.date_releve (
select min(c.date_releve)
from releve as c
where c.vehicule = a.vehicule
and c.date_releve>a.date_releve
)
) as kms
from releve as a
Tu crée ta vue.
Ensuite
select *
from maVue
where kmf <> kms
Tu as obtiens l'ensemble de tes discontinuités.
"denis" <nospam@nospam.com> a écrit dans le message de
news:%23rumGQuNGHA.428@tk2msftngp13.phx.gbl...
Bonjour à tous,
je me torture l'esprit pour optimiser les temps de calculs sur une
requête,
et
j'aimerais votre avis sur la question.
j'ai une table qui contient les relevés kilométriques de véhicules, et je
veux rechercher
les discontinuités :
table km_mesures :
id : clé de la table, identifiant unique du relevé
vehicule : numéro du véhicule
date_releve : date et heure du relevé
code_activite : code indiquant de qu'a fait le véhicule
kmd : kilométrage début
kmf : kilométrage fin
je cherche à faire une procédure stockée qui
me renvoie les discontinuités dans les relevés kilométriques.
enregistrement id98 : le 20/01 pour le véhicule 300, kmf vaut 50000
enregistrement id 56 : le 21/01 pour le véhicule 300, kmd vaut 50010
il y a donc 10 km non justifiés, il faudrait renvoyer :
300 / 9898 / 9956 / 10
je l'ai fait à l'aide d'un recordset que je balaye dans mon code mais
la table commence à avoit plusieurs milliers d'enregistrements et cela
devinent très lent.
avez vous une idée pour accélérer le bazar ?
pensez-vous qu'en utilisant une procédure stockée avec un curseur cela ira
plus vite qu'avec mon code VB ? encore mieux, peut-on éviter le curseur ?
Cette requete te donne pour chacun des releves, le kilometrage de début du releve suivant : colonne kms
select a.id , a.vehicule , a.date_releve , a.code_activite , a.kmd , a.kmf , ( select b.kmd from releve b where b.vehicule = a. vehicule and b.date_releve ( select min(c.date_releve) from releve as c where c.vehicule = a.vehicule and c.date_releve>a.date_releve ) ) as kms from releve as a
Tu crée ta vue.
Ensuite
select * from maVue where kmf <> kms
Tu as obtiens l'ensemble de tes discontinuités.
"denis" a écrit dans le message de news:%
Bonjour à tous,
je me torture l'esprit pour optimiser les temps de calculs sur une
requête,
et j'aimerais votre avis sur la question. j'ai une table qui contient les relevés kilométriques de véhicules, et je veux rechercher les discontinuités :
table km_mesures : id : clé de la table, identifiant unique du relevé vehicule : numéro du véhicule date_releve : date et heure du relevé code_activite : code indiquant de qu'a fait le véhicule kmd : kilométrage début kmf : kilométrage fin
je cherche à faire une procédure stockée qui me renvoie les discontinuités dans les relevés kilométriques. enregistrement id98 : le 20/01 pour le véhicule 300, kmf vaut 50000 enregistrement id 56 : le 21/01 pour le véhicule 300, kmd vaut 50010 il y a donc 10 km non justifiés, il faudrait renvoyer :
300 / 9898 / 9956 / 10
je l'ai fait à l'aide d'un recordset que je balaye dans mon code mais la table commence à avoit plusieurs milliers d'enregistrements et cela devinent très lent.
avez vous une idée pour accélérer le bazar ? pensez-vous qu'en utilisant une procédure stockée avec un curseur cela ira plus vite qu'avec mon code VB ? encore mieux, peut-on éviter le curseur ?
merci beaucoup
Denis
Synopsis
En créeant un index sur (vehicule, date_releve) va beaucoup aider.
"Synopsis" a écrit dans le message de news:43fb0e44$0$18334$
Cette requete te donne pour chacun des releves, le kilometrage de début du releve suivant : colonne kms
select a.id , a.vehicule , a.date_releve , a.code_activite , a.kmd , a.kmf , ( select b.kmd from releve b where b.vehicule = a. vehicule and b.date_releve > ( select min(c.date_releve) from releve as c where c.vehicule = a.vehicule and c.date_releve>a.date_releve ) ) as kms from releve as a
Tu crée ta vue.
Ensuite
select * from maVue where kmf <> kms
Tu as obtiens l'ensemble de tes discontinuités.
"denis" a écrit dans le message de news:% > Bonjour à tous, > > je me torture l'esprit pour optimiser les temps de calculs sur une requête, > et > j'aimerais votre avis sur la question. > j'ai une table qui contient les relevés kilométriques de véhicules, et
je
> veux rechercher > les discontinuités : > > table km_mesures : > id : clé de la table, identifiant unique du relevé > vehicule : numéro du véhicule > date_releve : date et heure du relevé > code_activite : code indiquant de qu'a fait le véhicule > kmd : kilométrage début > kmf : kilométrage fin > > je cherche à faire une procédure stockée qui > me renvoie les discontinuités dans les relevés kilométriques. > enregistrement id98 : le 20/01 pour le véhicule 300, kmf vaut 50000 > enregistrement id 56 : le 21/01 pour le véhicule 300, kmd vaut 50010 > il y a donc 10 km non justifiés, il faudrait renvoyer : > > 300 / 9898 / 9956 / 10 > > je l'ai fait à l'aide d'un recordset que je balaye dans mon code mais > la table commence à avoit plusieurs milliers d'enregistrements et cela > devinent très lent. > > avez vous une idée pour accélérer le bazar ? > pensez-vous qu'en utilisant une procédure stockée avec un curseur cela
ira
> plus vite qu'avec mon code VB ? encore mieux, peut-on éviter le curseur
?
> > merci beaucoup > > Denis > >
En créeant un index sur (vehicule, date_releve) va beaucoup aider.
"Synopsis" <nospam@worry.com> a écrit dans le message de
news:43fb0e44$0$18334$8fcfb975@news.wanadoo.fr...
Cette requete te donne pour chacun des releves,
le kilometrage de début du releve suivant : colonne kms
select
a.id
, a.vehicule
, a.date_releve
, a.code_activite
, a.kmd
, a.kmf
, (
select b.kmd
from releve b
where b.vehicule = a. vehicule
and b.date_releve > (
select min(c.date_releve)
from releve as c
where c.vehicule = a.vehicule
and c.date_releve>a.date_releve
)
) as kms
from releve as a
Tu crée ta vue.
Ensuite
select *
from maVue
where kmf <> kms
Tu as obtiens l'ensemble de tes discontinuités.
"denis" <nospam@nospam.com> a écrit dans le message de
news:%23rumGQuNGHA.428@tk2msftngp13.phx.gbl...
> Bonjour à tous,
>
> je me torture l'esprit pour optimiser les temps de calculs sur une
requête,
> et
> j'aimerais votre avis sur la question.
> j'ai une table qui contient les relevés kilométriques de véhicules, et
je
> veux rechercher
> les discontinuités :
>
> table km_mesures :
> id : clé de la table, identifiant unique du relevé
> vehicule : numéro du véhicule
> date_releve : date et heure du relevé
> code_activite : code indiquant de qu'a fait le véhicule
> kmd : kilométrage début
> kmf : kilométrage fin
>
> je cherche à faire une procédure stockée qui
> me renvoie les discontinuités dans les relevés kilométriques.
> enregistrement id98 : le 20/01 pour le véhicule 300, kmf vaut 50000
> enregistrement id 56 : le 21/01 pour le véhicule 300, kmd vaut 50010
> il y a donc 10 km non justifiés, il faudrait renvoyer :
>
> 300 / 9898 / 9956 / 10
>
> je l'ai fait à l'aide d'un recordset que je balaye dans mon code mais
> la table commence à avoit plusieurs milliers d'enregistrements et cela
> devinent très lent.
>
> avez vous une idée pour accélérer le bazar ?
> pensez-vous qu'en utilisant une procédure stockée avec un curseur cela
ira
> plus vite qu'avec mon code VB ? encore mieux, peut-on éviter le curseur
En créeant un index sur (vehicule, date_releve) va beaucoup aider.
"Synopsis" a écrit dans le message de news:43fb0e44$0$18334$
Cette requete te donne pour chacun des releves, le kilometrage de début du releve suivant : colonne kms
select a.id , a.vehicule , a.date_releve , a.code_activite , a.kmd , a.kmf , ( select b.kmd from releve b where b.vehicule = a. vehicule and b.date_releve > ( select min(c.date_releve) from releve as c where c.vehicule = a.vehicule and c.date_releve>a.date_releve ) ) as kms from releve as a
Tu crée ta vue.
Ensuite
select * from maVue where kmf <> kms
Tu as obtiens l'ensemble de tes discontinuités.
"denis" a écrit dans le message de news:% > Bonjour à tous, > > je me torture l'esprit pour optimiser les temps de calculs sur une requête, > et > j'aimerais votre avis sur la question. > j'ai une table qui contient les relevés kilométriques de véhicules, et
je
> veux rechercher > les discontinuités : > > table km_mesures : > id : clé de la table, identifiant unique du relevé > vehicule : numéro du véhicule > date_releve : date et heure du relevé > code_activite : code indiquant de qu'a fait le véhicule > kmd : kilométrage début > kmf : kilométrage fin > > je cherche à faire une procédure stockée qui > me renvoie les discontinuités dans les relevés kilométriques. > enregistrement id98 : le 20/01 pour le véhicule 300, kmf vaut 50000 > enregistrement id 56 : le 21/01 pour le véhicule 300, kmd vaut 50010 > il y a donc 10 km non justifiés, il faudrait renvoyer : > > 300 / 9898 / 9956 / 10 > > je l'ai fait à l'aide d'un recordset que je balaye dans mon code mais > la table commence à avoit plusieurs milliers d'enregistrements et cela > devinent très lent. > > avez vous une idée pour accélérer le bazar ? > pensez-vous qu'en utilisant une procédure stockée avec un curseur cela
ira
> plus vite qu'avec mon code VB ? encore mieux, peut-on éviter le curseur
?
> > merci beaucoup > > Denis > >
denis
"Synopsis" a écrit dans le message de news: 43fb0e44$0$18334$
Cette requete te donne pour chacun des releves, le kilometrage de début du releve suivant : colonne kms
select a.id , a.vehicule , a.date_releve , a.code_activite , a.kmd , a.kmf , ( select b.kmd from releve b where b.vehicule = a. vehicule and b.date_releve > ( select min(c.date_releve) from releve as c where c.vehicule = a.vehicule and c.date_releve>a.date_releve ) ) as kms from releve as a
Tu crée ta vue.
Ensuite
select * from maVue where kmf <> kms
Tu as obtiens l'ensemble de tes discontinuités.
merci,
je voyais pas comment faire remonter le suivant, c'était simplement un min... je vais tester...
@++
"Synopsis" <nospam@worry.com> a écrit dans le message de news:
43fb0e44$0$18334$8fcfb975@news.wanadoo.fr...
Cette requete te donne pour chacun des releves,
le kilometrage de début du releve suivant : colonne kms
select
a.id
, a.vehicule
, a.date_releve
, a.code_activite
, a.kmd
, a.kmf
, (
select b.kmd
from releve b
where b.vehicule = a. vehicule
and b.date_releve > (
select min(c.date_releve)
from releve as c
where c.vehicule = a.vehicule
and c.date_releve>a.date_releve
)
) as kms
from releve as a
Tu crée ta vue.
Ensuite
select *
from maVue
where kmf <> kms
Tu as obtiens l'ensemble de tes discontinuités.
merci,
je voyais pas comment faire remonter le suivant, c'était simplement
un min...
je vais tester...
"Synopsis" a écrit dans le message de news: 43fb0e44$0$18334$
Cette requete te donne pour chacun des releves, le kilometrage de début du releve suivant : colonne kms
select a.id , a.vehicule , a.date_releve , a.code_activite , a.kmd , a.kmf , ( select b.kmd from releve b where b.vehicule = a. vehicule and b.date_releve > ( select min(c.date_releve) from releve as c where c.vehicule = a.vehicule and c.date_releve>a.date_releve ) ) as kms from releve as a
Tu crée ta vue.
Ensuite
select * from maVue where kmf <> kms
Tu as obtiens l'ensemble de tes discontinuités.
merci,
je voyais pas comment faire remonter le suivant, c'était simplement un min... je vais tester...