OVH Cloud OVH Cloud

debutant en requete

6 réponses
Avatar
fred
Bonjour,
je possede 2 tables

T_VEHICULE_VE representant des vehicules
et contenant les champs
VE_VEHICULEID
VE_IMMATRICULATION
VE_CATEGORIE
et
T_POSITION_PO reprensantant des positions
et contenant les champs
PO_VEHICULEID
PO_DATEHEURE
PO_LATITUDE
PO_LONGITUDE

Je souhaite obtenir le resultat suivant:
IMMATRICULATION | DATEHEURE | LATITUDE | LONGITUDE
ou date et heure, latitude et longitude sont les donnés de l'enregistrement
dont le champs DATEHEURE et le plus grand
et ce pour chaque enregistrement de la table T_VEHICULE_VE.
J'imagine qu'il faut utiliser le groupe by dans la table T_VEHICULE_VE et la
fonction MAX dans T_POSITION_PO mais je ne vois pas comment combiner les
deux.

merci de votre aide

fred

6 réponses

Avatar
Thierry
SELECT PO_VEHICULEID, MAX(PO_DATEHEURE) AS DATEHEURE
INTO #TEMP
FROM T_POSITION_PO
GROUP BY PO_VEHICULEID

SELECT VE_IMMATRICULATION , DATEHEURE, PO_LATITUDE, PO_LONGITUDE
FROM #TEMP
INNER JOIN T_VEHICULE_VE
ON #TEMP.PO_VEHICULEID=T_VEHICULE_VE.VE_VEHICULEID
INNER JOIN T_POSITION_PO
ON T_POSITION_PO.PO_VEHICULEID = #TEMP.PO_VEHICULEID
AND T_POSITION_PO.PO_DATEHEURE = #TEMP.DATEHEURE

DROP TABLE #TEMP

Il est possible de le faire en une seule requête (WHERE EXISTS...), mais
c'est généralement mauvais question performance.

--
Thierry


"fred" a écrit dans le message de news:
%
Bonjour,
je possede 2 tables

T_VEHICULE_VE representant des vehicules
et contenant les champs
VE_VEHICULEID
VE_IMMATRICULATION
VE_CATEGORIE
et
T_POSITION_PO reprensantant des positions
et contenant les champs
PO_VEHICULEID
PO_DATEHEURE
PO_LATITUDE
PO_LONGITUDE

Je souhaite obtenir le resultat suivant:
IMMATRICULATION | DATEHEURE | LATITUDE | LONGITUDE
ou date et heure, latitude et longitude sont les donnés de
l'enregistrement
dont le champs DATEHEURE et le plus grand
et ce pour chaque enregistrement de la table T_VEHICULE_VE.
J'imagine qu'il faut utiliser le groupe by dans la table T_VEHICULE_VE et
la
fonction MAX dans T_POSITION_PO mais je ne vois pas comment combiner les
deux.

merci de votre aide

fred






Avatar
News Groups
Bonjour,
Je m'insere dans la discussion car la réponse me pose une question
concernant les table temporaires :
Dans le cas ou les instructions créant ou alimentant la table temporaire
sont lancé par plusieurs utilisateurs, comment sont gérées les différentes
instances de tables temporaires (si il n'y en à qu'une, un conflit va se
produire !) ?
Exemple : une table temporaire est créée et alimentée afin d'être utilisée
comme source d'un rapport, si un autre utilisateur execute la même action
pour afficher le rapport = Probléme !??

Merci de vos lumiéres,
Thierry.

"Thierry" a écrit dans le message de news:

SELECT PO_VEHICULEID, MAX(PO_DATEHEURE) AS DATEHEURE
INTO #TEMP
FROM T_POSITION_PO
GROUP BY PO_VEHICULEID

SELECT VE_IMMATRICULATION , DATEHEURE, PO_LATITUDE, PO_LONGITUDE
FROM #TEMP
INNER JOIN T_VEHICULE_VE
ON #TEMP.PO_VEHICULEID=T_VEHICULE_VE.VE_VEHICULEID
INNER JOIN T_POSITION_PO
ON T_POSITION_PO.PO_VEHICULEID = #TEMP.PO_VEHICULEID
AND T_POSITION_PO.PO_DATEHEURE = #TEMP.DATEHEURE

DROP TABLE #TEMP

Il est possible de le faire en une seule requête (WHERE EXISTS...), mais
c'est généralement mauvais question performance.

--
Thierry


"fred" a écrit dans le message de news:
%
> Bonjour,
> je possede 2 tables
>
> T_VEHICULE_VE representant des vehicules
> et contenant les champs
> VE_VEHICULEID
> VE_IMMATRICULATION
> VE_CATEGORIE
> et
> T_POSITION_PO reprensantant des positions
> et contenant les champs
> PO_VEHICULEID
> PO_DATEHEURE
> PO_LATITUDE
> PO_LONGITUDE
>
> Je souhaite obtenir le resultat suivant:
> IMMATRICULATION | DATEHEURE | LATITUDE | LONGITUDE
> ou date et heure, latitude et longitude sont les donnés de
> l'enregistrement
> dont le champs DATEHEURE et le plus grand
> et ce pour chaque enregistrement de la table T_VEHICULE_VE.
> J'imagine qu'il faut utiliser le groupe by dans la table T_VEHICULE_VE


et
> la
> fonction MAX dans T_POSITION_PO mais je ne vois pas comment combiner les
> deux.
>
> merci de votre aide
>
> fred
>
>
>
>




Avatar
Thierry
Bonjour,
une table temporaire nommé #TEMP n'est pas communes à tous les utilisateurs
contrairement à ##TEMP

Un même utilisateur peut même créer 2 tables #TEMP qui seront bien
distinctes, dans 2 sessions de connexion diffèrentes.

--
Thierry


"News Groups" a écrit dans le message de news:
41342db5$0$29670$
Bonjour,
Je m'insere dans la discussion car la réponse me pose une question
concernant les table temporaires :
Dans le cas ou les instructions créant ou alimentant la table temporaire
sont lancé par plusieurs utilisateurs, comment sont gérées les différentes
instances de tables temporaires (si il n'y en à qu'une, un conflit va se
produire !) ?
Exemple : une table temporaire est créée et alimentée afin d'être utilisée
comme source d'un rapport, si un autre utilisateur execute la même action
pour afficher le rapport = Probléme !??

Merci de vos lumiéres,
Thierry.

"Thierry" a écrit dans le message de news:

SELECT PO_VEHICULEID, MAX(PO_DATEHEURE) AS DATEHEURE
INTO #TEMP
FROM T_POSITION_PO
GROUP BY PO_VEHICULEID

SELECT VE_IMMATRICULATION , DATEHEURE, PO_LATITUDE, PO_LONGITUDE
FROM #TEMP
INNER JOIN T_VEHICULE_VE
ON #TEMP.PO_VEHICULEID=T_VEHICULE_VE.VE_VEHICULEID
INNER JOIN T_POSITION_PO
ON T_POSITION_PO.PO_VEHICULEID = #TEMP.PO_VEHICULEID
AND T_POSITION_PO.PO_DATEHEURE = #TEMP.DATEHEURE

DROP TABLE #TEMP

Il est possible de le faire en une seule requête (WHERE EXISTS...), mais
c'est généralement mauvais question performance.

--
Thierry


"fred" a écrit dans le message de news:
%
> Bonjour,
> je possede 2 tables
>
> T_VEHICULE_VE representant des vehicules
> et contenant les champs
> VE_VEHICULEID
> VE_IMMATRICULATION
> VE_CATEGORIE
> et
> T_POSITION_PO reprensantant des positions
> et contenant les champs
> PO_VEHICULEID
> PO_DATEHEURE
> PO_LATITUDE
> PO_LONGITUDE
>
> Je souhaite obtenir le resultat suivant:
> IMMATRICULATION | DATEHEURE | LATITUDE | LONGITUDE
> ou date et heure, latitude et longitude sont les donnés de
> l'enregistrement
> dont le champs DATEHEURE et le plus grand
> et ce pour chaque enregistrement de la table T_VEHICULE_VE.
> J'imagine qu'il faut utiliser le groupe by dans la table T_VEHICULE_VE


et
> la
> fonction MAX dans T_POSITION_PO mais je ne vois pas comment combiner
> les
> deux.
>
> merci de votre aide
>
> fred
>
>
>
>








Avatar
News Groups
Merci de la précision apportée,
je vais consulté l'aide à ce sujet car cela va être trés interressant pour
certains cas présents ;-) !!
J'ai plutôt l'habitude d'utiliser des variables de type "table" dans mes
fonctions et procédures stockées pour justement ne pas créer des tables
tempo (que je pensais commune à tous les utilisateurs.!!.)

Est il plus intérresant (en terme de perf) d'utiliser le type table ou des
tables Temporaires ?

Merci encore,
Thierry ;-)
"Thierry" a écrit dans le message de news:
OqLrZ$
Bonjour,
une table temporaire nommé #TEMP n'est pas communes à tous les


utilisateurs
contrairement à ##TEMP

Un même utilisateur peut même créer 2 tables #TEMP qui seront bien
distinctes, dans 2 sessions de connexion diffèrentes.

--
Thierry


"News Groups" a écrit dans le message de news:
41342db5$0$29670$
> Bonjour,
> Je m'insere dans la discussion car la réponse me pose une question
> concernant les table temporaires :
> Dans le cas ou les instructions créant ou alimentant la table temporaire
> sont lancé par plusieurs utilisateurs, comment sont gérées les


différentes
> instances de tables temporaires (si il n'y en à qu'une, un conflit va se
> produire !) ?
> Exemple : une table temporaire est créée et alimentée afin d'être


utilisée
> comme source d'un rapport, si un autre utilisateur execute la même


action
> pour afficher le rapport = Probléme !??
>
> Merci de vos lumiéres,
> Thierry.
>
> "Thierry" a écrit dans le message de news:
>
>> SELECT PO_VEHICULEID, MAX(PO_DATEHEURE) AS DATEHEURE
>> INTO #TEMP
>> FROM T_POSITION_PO
>> GROUP BY PO_VEHICULEID
>>
>> SELECT VE_IMMATRICULATION , DATEHEURE, PO_LATITUDE, PO_LONGITUDE
>> FROM #TEMP
>> INNER JOIN T_VEHICULE_VE
>> ON #TEMP.PO_VEHICULEID=T_VEHICULE_VE.VE_VEHICULEID
>> INNER JOIN T_POSITION_PO
>> ON T_POSITION_PO.PO_VEHICULEID = #TEMP.PO_VEHICULEID
>> AND T_POSITION_PO.PO_DATEHEURE = #TEMP.DATEHEURE
>>
>> DROP TABLE #TEMP
>>
>> Il est possible de le faire en une seule requête (WHERE EXISTS...),


mais
>> c'est généralement mauvais question performance.
>>
>> --
>> Thierry
>>
>>
>> "fred" a écrit dans le message de news:
>> %
>> > Bonjour,
>> > je possede 2 tables
>> >
>> > T_VEHICULE_VE representant des vehicules
>> > et contenant les champs
>> > VE_VEHICULEID
>> > VE_IMMATRICULATION
>> > VE_CATEGORIE
>> > et
>> > T_POSITION_PO reprensantant des positions
>> > et contenant les champs
>> > PO_VEHICULEID
>> > PO_DATEHEURE
>> > PO_LATITUDE
>> > PO_LONGITUDE
>> >
>> > Je souhaite obtenir le resultat suivant:
>> > IMMATRICULATION | DATEHEURE | LATITUDE | LONGITUDE
>> > ou date et heure, latitude et longitude sont les donnés de
>> > l'enregistrement
>> > dont le champs DATEHEURE et le plus grand
>> > et ce pour chaque enregistrement de la table T_VEHICULE_VE.
>> > J'imagine qu'il faut utiliser le groupe by dans la table


T_VEHICULE_VE
> et
>> > la
>> > fonction MAX dans T_POSITION_PO mais je ne vois pas comment combiner
>> > les
>> > deux.
>> >
>> > merci de votre aide
>> >
>> > fred
>> >
>> >
>> >
>> >
>>
>>
>
>




Avatar
Thierry
Tu as peut-être raison, les variables de type TABLE étant une nouveauté de
SQL SERVER 2000, je n'ai jamais encore eu l'idée de l'utiliser !

--
Thierry


"News Groups" a écrit dans le message de news:
41344546$0$29660$
Merci de la précision apportée,
je vais consulté l'aide à ce sujet car cela va être trés interressant pour
certains cas présents ;-) !!
J'ai plutôt l'habitude d'utiliser des variables de type "table" dans mes
fonctions et procédures stockées pour justement ne pas créer des tables
tempo (que je pensais commune à tous les utilisateurs.!!.)

Est il plus intérresant (en terme de perf) d'utiliser le type table ou des
tables Temporaires ?

Merci encore,
Thierry ;-)
"Thierry" a écrit dans le message de news:
OqLrZ$
Bonjour,
une table temporaire nommé #TEMP n'est pas communes à tous les


utilisateurs
contrairement à ##TEMP

Un même utilisateur peut même créer 2 tables #TEMP qui seront bien
distinctes, dans 2 sessions de connexion diffèrentes.

--
Thierry


"News Groups" a écrit dans le message de news:
41342db5$0$29670$
> Bonjour,
> Je m'insere dans la discussion car la réponse me pose une question
> concernant les table temporaires :
> Dans le cas ou les instructions créant ou alimentant la table
> temporaire
> sont lancé par plusieurs utilisateurs, comment sont gérées les


différentes
> instances de tables temporaires (si il n'y en à qu'une, un conflit va
> se
> produire !) ?
> Exemple : une table temporaire est créée et alimentée afin d'être


utilisée
> comme source d'un rapport, si un autre utilisateur execute la même


action
> pour afficher le rapport = Probléme !??
>
> Merci de vos lumiéres,
> Thierry.
>
> "Thierry" a écrit dans le message de news:
>
>> SELECT PO_VEHICULEID, MAX(PO_DATEHEURE) AS DATEHEURE
>> INTO #TEMP
>> FROM T_POSITION_PO
>> GROUP BY PO_VEHICULEID
>>
>> SELECT VE_IMMATRICULATION , DATEHEURE, PO_LATITUDE, PO_LONGITUDE
>> FROM #TEMP
>> INNER JOIN T_VEHICULE_VE
>> ON #TEMP.PO_VEHICULEID=T_VEHICULE_VE.VE_VEHICULEID
>> INNER JOIN T_POSITION_PO
>> ON T_POSITION_PO.PO_VEHICULEID = #TEMP.PO_VEHICULEID
>> AND T_POSITION_PO.PO_DATEHEURE = #TEMP.DATEHEURE
>>
>> DROP TABLE #TEMP
>>
>> Il est possible de le faire en une seule requête (WHERE EXISTS...),


mais
>> c'est généralement mauvais question performance.
>>
>> --
>> Thierry
>>
>>
>> "fred" a écrit dans le message de news:
>> %
>> > Bonjour,
>> > je possede 2 tables
>> >
>> > T_VEHICULE_VE representant des vehicules
>> > et contenant les champs
>> > VE_VEHICULEID
>> > VE_IMMATRICULATION
>> > VE_CATEGORIE
>> > et
>> > T_POSITION_PO reprensantant des positions
>> > et contenant les champs
>> > PO_VEHICULEID
>> > PO_DATEHEURE
>> > PO_LATITUDE
>> > PO_LONGITUDE
>> >
>> > Je souhaite obtenir le resultat suivant:
>> > IMMATRICULATION | DATEHEURE | LATITUDE | LONGITUDE
>> > ou date et heure, latitude et longitude sont les donnés de
>> > l'enregistrement
>> > dont le champs DATEHEURE et le plus grand
>> > et ce pour chaque enregistrement de la table T_VEHICULE_VE.
>> > J'imagine qu'il faut utiliser le groupe by dans la table


T_VEHICULE_VE
> et
>> > la
>> > fonction MAX dans T_POSITION_PO mais je ne vois pas comment combiner
>> > les
>> > deux.
>> >
>> > merci de votre aide
>> >
>> > fred
>> >
>> >
>> >
>> >
>>
>>
>
>








Avatar
News Groups
Merci de ton aide,
PS : après lecture, l'aide de Microsoft préconise d'utiliser, si possible
suivant la portée désirée, le type Table au lieu de table temporaires.
Thierry.

"Thierry" a écrit dans le message de news:
OVq5z$
Tu as peut-être raison, les variables de type TABLE étant une nouveauté de
SQL SERVER 2000, je n'ai jamais encore eu l'idée de l'utiliser !

--
Thierry


"News Groups" a écrit dans le message de news:
41344546$0$29660$
> Merci de la précision apportée,
> je vais consulté l'aide à ce sujet car cela va être trés interressant


pour
> certains cas présents ;-) !!
> J'ai plutôt l'habitude d'utiliser des variables de type "table" dans mes
> fonctions et procédures stockées pour justement ne pas créer des tables
> tempo (que je pensais commune à tous les utilisateurs.!!.)
>
> Est il plus intérresant (en terme de perf) d'utiliser le type table ou


des
> tables Temporaires ?
>
> Merci encore,
> Thierry ;-)
> "Thierry" a écrit dans le message de news:
> OqLrZ$
>> Bonjour,
>> une table temporaire nommé #TEMP n'est pas communes à tous les
> utilisateurs
>> contrairement à ##TEMP
>>
>> Un même utilisateur peut même créer 2 tables #TEMP qui seront bien
>> distinctes, dans 2 sessions de connexion diffèrentes.
>>
>> --
>> Thierry
>>
>>
>> "News Groups" a écrit dans le message de news:
>> 41342db5$0$29670$
>> > Bonjour,
>> > Je m'insere dans la discussion car la réponse me pose une question
>> > concernant les table temporaires :
>> > Dans le cas ou les instructions créant ou alimentant la table
>> > temporaire
>> > sont lancé par plusieurs utilisateurs, comment sont gérées les
> différentes
>> > instances de tables temporaires (si il n'y en à qu'une, un conflit va



>> > se
>> > produire !) ?
>> > Exemple : une table temporaire est créée et alimentée afin d'être
> utilisée
>> > comme source d'un rapport, si un autre utilisateur execute la même
> action
>> > pour afficher le rapport = Probléme !??
>> >
>> > Merci de vos lumiéres,
>> > Thierry.
>> >
>> > "Thierry" a écrit dans le message de news:
>> >
>> >> SELECT PO_VEHICULEID, MAX(PO_DATEHEURE) AS DATEHEURE
>> >> INTO #TEMP
>> >> FROM T_POSITION_PO
>> >> GROUP BY PO_VEHICULEID
>> >>
>> >> SELECT VE_IMMATRICULATION , DATEHEURE, PO_LATITUDE, PO_LONGITUDE
>> >> FROM #TEMP
>> >> INNER JOIN T_VEHICULE_VE
>> >> ON #TEMP.PO_VEHICULEID=T_VEHICULE_VE.VE_VEHICULEID
>> >> INNER JOIN T_POSITION_PO
>> >> ON T_POSITION_PO.PO_VEHICULEID = #TEMP.PO_VEHICULEID
>> >> AND T_POSITION_PO.PO_DATEHEURE = #TEMP.DATEHEURE
>> >>
>> >> DROP TABLE #TEMP
>> >>
>> >> Il est possible de le faire en une seule requête (WHERE EXISTS...),
> mais
>> >> c'est généralement mauvais question performance.
>> >>
>> >> --
>> >> Thierry
>> >>
>> >>
>> >> "fred" a écrit dans le message de news:
>> >> %
>> >> > Bonjour,
>> >> > je possede 2 tables
>> >> >
>> >> > T_VEHICULE_VE representant des vehicules
>> >> > et contenant les champs
>> >> > VE_VEHICULEID
>> >> > VE_IMMATRICULATION
>> >> > VE_CATEGORIE
>> >> > et
>> >> > T_POSITION_PO reprensantant des positions
>> >> > et contenant les champs
>> >> > PO_VEHICULEID
>> >> > PO_DATEHEURE
>> >> > PO_LATITUDE
>> >> > PO_LONGITUDE
>> >> >
>> >> > Je souhaite obtenir le resultat suivant:
>> >> > IMMATRICULATION | DATEHEURE | LATITUDE | LONGITUDE
>> >> > ou date et heure, latitude et longitude sont les donnés de
>> >> > l'enregistrement
>> >> > dont le champs DATEHEURE et le plus grand
>> >> > et ce pour chaque enregistrement de la table T_VEHICULE_VE.
>> >> > J'imagine qu'il faut utiliser le groupe by dans la table
> T_VEHICULE_VE
>> > et
>> >> > la
>> >> > fonction MAX dans T_POSITION_PO mais je ne vois pas comment


combiner
>> >> > les
>> >> > deux.
>> >> >
>> >> > merci de votre aide
>> >> >
>> >> > fred
>> >> >
>> >> >
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>