Je me demandais s'il existe un moyen simple de r=E9soudre le cas
suivant. Je n'ai pas cr=E9er la base de donn=E9e et ne peut la modifier.
J'ai une table avec plein de donn=E9es dont un champ date de
creation(DAT_CRE) de format YYYYMMDD un champ Heure de
cr=E9ation(TIM_CRE) de format hhmmss et enfin un champ de num=E9ro de
version(NUM_VER) de format N.
Dans la table a laquelle j'ai acces j'ai des lignes presque identiques
il se peut par exemple pour le champ nom il y ai une correction d'une
faute d'ortographe et que Mr totos devienne Mr Toto par exemple.
J'ai donc 3 lignes avec
(K) cette donn=E9e fait partie de la cl=E9 primaire pour moi mais ne fait
pas partie de pas celle de la table.
Dans ce cas, je souahiterai donc r=E9cu=E8rper la ligne Mr Toto donc la
ligne avec Key1 =3D 1 Key2 =3D 2 et dont la valeur de NUM_VER est la plus
haute, dans mon cas 2.
Et donc fait cela pour toute ma table.
Peut =EAtre plus simplement, je serai tent=E9 de faire(je sais que cela
est faux):
SELECT Key1, Key2, NOM, Data1, ......, Data N, DAT_CRE , TIM_CRE,
NUM_VER
FROM MATABLE
GROUP BY Key1, Key2,DAT_CRE, TIM_CRE
Where Max(NUM_VER)
Comment m'y prendre en sql ?
Existe t il aussi un moyen simple avec DTS ?
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
Fred BROUARD
SELECT ... FROM MATABLE T WHERE NUM_VER = (SELECT MAX(NUM_VER) FROM MATABLE TT WHERE T.Key1 = TT.Key1 AND T.Key2 = TT.Key2)
A +
Kurt a écrit :
Bonjour,
Je me demandais s'il existe un moyen simple de résoudre le cas suivant. Je n'ai pas créer la base de donnée et ne peut la modifier. J'ai une table avec plein de données dont un champ date de creation(DAT_CRE) de format YYYYMMDD un champ Heure de création(TIM_CRE) de format hhmmss et enfin un champ de numéro de version(NUM_VER) de format N. Dans la table a laquelle j'ai acces j'ai des lignes presque identiques il se peut par exemple pour le champ nom il y ai une correction d'une faute d'ortographe et que Mr totos devienne Mr Toto par exemple. J'ai donc 3 lignes avec
(K) cette donnée fait partie de la clé primaire pour moi mais ne fait pas partie de pas celle de la table.
Dans ce cas, je souahiterai donc récuèrper la ligne Mr Toto donc la ligne avec Key1 = 1 Key2 = 2 et dont la valeur de NUM_VER est la plus haute, dans mon cas 2. Et donc fait cela pour toute ma table. Peut être plus simplement, je serai tenté de faire(je sais que cela est faux): SELECT Key1, Key2, NOM, Data1, ......, Data N, DAT_CRE , TIM_CRE, NUM_VER FROM MATABLE GROUP BY Key1, Key2,DAT_CRE, TIM_CRE Where Max(NUM_VER)
Comment m'y prendre en sql ? Existe t il aussi un moyen simple avec DTS ?
Je vous remercie d'avance.
Cordialement,
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
SELECT ...
FROM MATABLE T
WHERE NUM_VER = (SELECT MAX(NUM_VER)
FROM MATABLE TT
WHERE T.Key1 = TT.Key1
AND T.Key2 = TT.Key2)
A +
Kurt a écrit :
Bonjour,
Je me demandais s'il existe un moyen simple de résoudre le cas
suivant. Je n'ai pas créer la base de donnée et ne peut la modifier.
J'ai une table avec plein de données dont un champ date de
creation(DAT_CRE) de format YYYYMMDD un champ Heure de
création(TIM_CRE) de format hhmmss et enfin un champ de numéro de
version(NUM_VER) de format N.
Dans la table a laquelle j'ai acces j'ai des lignes presque identiques
il se peut par exemple pour le champ nom il y ai une correction d'une
faute d'ortographe et que Mr totos devienne Mr Toto par exemple.
J'ai donc 3 lignes avec
(K) cette donnée fait partie de la clé primaire pour moi mais ne fait
pas partie de pas celle de la table.
Dans ce cas, je souahiterai donc récuèrper la ligne Mr Toto donc la
ligne avec Key1 = 1 Key2 = 2 et dont la valeur de NUM_VER est la plus
haute, dans mon cas 2.
Et donc fait cela pour toute ma table.
Peut être plus simplement, je serai tenté de faire(je sais que cela
est faux):
SELECT Key1, Key2, NOM, Data1, ......, Data N, DAT_CRE , TIM_CRE,
NUM_VER
FROM MATABLE
GROUP BY Key1, Key2,DAT_CRE, TIM_CRE
Where Max(NUM_VER)
Comment m'y prendre en sql ?
Existe t il aussi un moyen simple avec DTS ?
Je vous remercie d'avance.
Cordialement,
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
SELECT ... FROM MATABLE T WHERE NUM_VER = (SELECT MAX(NUM_VER) FROM MATABLE TT WHERE T.Key1 = TT.Key1 AND T.Key2 = TT.Key2)
A +
Kurt a écrit :
Bonjour,
Je me demandais s'il existe un moyen simple de résoudre le cas suivant. Je n'ai pas créer la base de donnée et ne peut la modifier. J'ai une table avec plein de données dont un champ date de creation(DAT_CRE) de format YYYYMMDD un champ Heure de création(TIM_CRE) de format hhmmss et enfin un champ de numéro de version(NUM_VER) de format N. Dans la table a laquelle j'ai acces j'ai des lignes presque identiques il se peut par exemple pour le champ nom il y ai une correction d'une faute d'ortographe et que Mr totos devienne Mr Toto par exemple. J'ai donc 3 lignes avec
(K) cette donnée fait partie de la clé primaire pour moi mais ne fait pas partie de pas celle de la table.
Dans ce cas, je souahiterai donc récuèrper la ligne Mr Toto donc la ligne avec Key1 = 1 Key2 = 2 et dont la valeur de NUM_VER est la plus haute, dans mon cas 2. Et donc fait cela pour toute ma table. Peut être plus simplement, je serai tenté de faire(je sais que cela est faux): SELECT Key1, Key2, NOM, Data1, ......, Data N, DAT_CRE , TIM_CRE, NUM_VER FROM MATABLE GROUP BY Key1, Key2,DAT_CRE, TIM_CRE Where Max(NUM_VER)
Comment m'y prendre en sql ? Existe t il aussi un moyen simple avec DTS ?
Je vous remercie d'avance.
Cordialement,
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Kurt
Bonjour,
Merci pour cette solution à laquelle je venais de penser à l'instant et qui en effet résoud mon problème :) Mais le truc que j'ai oublier de mentionner c'est que j'ai plus de 200 000 lignes dans ma table alors une requête de ce type met un long moment à s'executer. Existe t'il une autre méthode plus rapide ? Merci.
Fred BROUARD a écrit :
SELECT ... FROM MATABLE T WHERE NUM_VER = (SELECT MAX(NUM_VER) FROM MATABLE TT WHERE T.Key1 = TT.Key1 AND T.Key2 = TT.Key2)
A +
Kurt a écrit : > Bonjour, > > Je me demandais s'il existe un moyen simple de résoudre le cas > suivant. Je n'ai pas créer la base de donnée et ne peut la modifier. > J'ai une table avec plein de données dont un champ date de > creation(DAT_CRE) de format YYYYMMDD un champ Heure de > création(TIM_CRE) de format hhmmss et enfin un champ de numéro de > version(NUM_VER) de format N. > Dans la table a laquelle j'ai acces j'ai des lignes presque identiques > il se peut par exemple pour le champ nom il y ai une correction d'une > faute d'ortographe et que Mr totos devienne Mr Toto par exemple. > J'ai donc 3 lignes avec > > Key1(K) Key2(K) NOM Data1 ... DataN DAT_CRE TIM_CRE NUM_VER > 1 2 Mr totos XXXXX ... XXXX 20070101 103826 0 > 1 2 Mr toto XXXXX ... XXXX 20070101 103826 1 > 1 2 Mr Toto XXXXX ... XXXX 20070101 103826 2 > > (K) cette donnée fait partie de la clé primaire pour moi mais ne fa it > pas partie de pas celle de la table. > > Dans ce cas, je souahiterai donc récuèrper la ligne Mr Toto donc la > ligne avec Key1 = 1 Key2 = 2 et dont la valeur de NUM_VER est la pl us > haute, dans mon cas 2. > Et donc fait cela pour toute ma table. > Peut être plus simplement, je serai tenté de faire(je sais que cela > est faux): > SELECT Key1, Key2, NOM, Data1, ......, Data N, DAT_CRE , TIM_CRE, > NUM_VER > FROM MATABLE > GROUP BY Key1, Key2,DAT_CRE, TIM_CRE > Where Max(NUM_VER) > > Comment m'y prendre en sql ? > Existe t il aussi un moyen simple avec DTS ? > > Je vous remercie d'avance. > > Cordialement, >
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langag e SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Bonjour,
Merci pour cette solution à laquelle je venais de penser à l'instant
et qui en effet résoud mon problème :)
Mais le truc que j'ai oublier de mentionner c'est que j'ai plus de 200
000 lignes dans ma table alors une requête de ce type met un long
moment à s'executer.
Existe t'il une autre méthode plus rapide ?
Merci.
Fred BROUARD a écrit :
SELECT ...
FROM MATABLE T
WHERE NUM_VER = (SELECT MAX(NUM_VER)
FROM MATABLE TT
WHERE T.Key1 = TT.Key1
AND T.Key2 = TT.Key2)
A +
Kurt a écrit :
> Bonjour,
>
> Je me demandais s'il existe un moyen simple de résoudre le cas
> suivant. Je n'ai pas créer la base de donnée et ne peut la modifier.
> J'ai une table avec plein de données dont un champ date de
> creation(DAT_CRE) de format YYYYMMDD un champ Heure de
> création(TIM_CRE) de format hhmmss et enfin un champ de numéro de
> version(NUM_VER) de format N.
> Dans la table a laquelle j'ai acces j'ai des lignes presque identiques
> il se peut par exemple pour le champ nom il y ai une correction d'une
> faute d'ortographe et que Mr totos devienne Mr Toto par exemple.
> J'ai donc 3 lignes avec
>
> Key1(K) Key2(K) NOM Data1 ... DataN DAT_CRE TIM_CRE NUM_VER
> 1 2 Mr totos XXXXX ... XXXX 20070101 103826 0
> 1 2 Mr toto XXXXX ... XXXX 20070101 103826 1
> 1 2 Mr Toto XXXXX ... XXXX 20070101 103826 2
>
> (K) cette donnée fait partie de la clé primaire pour moi mais ne fa it
> pas partie de pas celle de la table.
>
> Dans ce cas, je souahiterai donc récuèrper la ligne Mr Toto donc la
> ligne avec Key1 = 1 Key2 = 2 et dont la valeur de NUM_VER est la pl us
> haute, dans mon cas 2.
> Et donc fait cela pour toute ma table.
> Peut être plus simplement, je serai tenté de faire(je sais que cela
> est faux):
> SELECT Key1, Key2, NOM, Data1, ......, Data N, DAT_CRE , TIM_CRE,
> NUM_VER
> FROM MATABLE
> GROUP BY Key1, Key2,DAT_CRE, TIM_CRE
> Where Max(NUM_VER)
>
> Comment m'y prendre en sql ?
> Existe t il aussi un moyen simple avec DTS ?
>
> Je vous remercie d'avance.
>
> Cordialement,
>
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langag e SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Merci pour cette solution à laquelle je venais de penser à l'instant et qui en effet résoud mon problème :) Mais le truc que j'ai oublier de mentionner c'est que j'ai plus de 200 000 lignes dans ma table alors une requête de ce type met un long moment à s'executer. Existe t'il une autre méthode plus rapide ? Merci.
Fred BROUARD a écrit :
SELECT ... FROM MATABLE T WHERE NUM_VER = (SELECT MAX(NUM_VER) FROM MATABLE TT WHERE T.Key1 = TT.Key1 AND T.Key2 = TT.Key2)
A +
Kurt a écrit : > Bonjour, > > Je me demandais s'il existe un moyen simple de résoudre le cas > suivant. Je n'ai pas créer la base de donnée et ne peut la modifier. > J'ai une table avec plein de données dont un champ date de > creation(DAT_CRE) de format YYYYMMDD un champ Heure de > création(TIM_CRE) de format hhmmss et enfin un champ de numéro de > version(NUM_VER) de format N. > Dans la table a laquelle j'ai acces j'ai des lignes presque identiques > il se peut par exemple pour le champ nom il y ai une correction d'une > faute d'ortographe et que Mr totos devienne Mr Toto par exemple. > J'ai donc 3 lignes avec > > Key1(K) Key2(K) NOM Data1 ... DataN DAT_CRE TIM_CRE NUM_VER > 1 2 Mr totos XXXXX ... XXXX 20070101 103826 0 > 1 2 Mr toto XXXXX ... XXXX 20070101 103826 1 > 1 2 Mr Toto XXXXX ... XXXX 20070101 103826 2 > > (K) cette donnée fait partie de la clé primaire pour moi mais ne fa it > pas partie de pas celle de la table. > > Dans ce cas, je souahiterai donc récuèrper la ligne Mr Toto donc la > ligne avec Key1 = 1 Key2 = 2 et dont la valeur de NUM_VER est la pl us > haute, dans mon cas 2. > Et donc fait cela pour toute ma table. > Peut être plus simplement, je serai tenté de faire(je sais que cela > est faux): > SELECT Key1, Key2, NOM, Data1, ......, Data N, DAT_CRE , TIM_CRE, > NUM_VER > FROM MATABLE > GROUP BY Key1, Key2,DAT_CRE, TIM_CRE > Where Max(NUM_VER) > > Comment m'y prendre en sql ? > Existe t il aussi un moyen simple avec DTS ? > > Je vous remercie d'avance. > > Cordialement, >
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langag e SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Fred BROUARD
Kurt a écrit :
Bonjour,
Merci pour cette solution à laquelle je venais de penser à l'instant et qui en effet résoud mon problème :) Mais le truc que j'ai oublier de mentionner c'est que j'ai plus de 200 000 lignes dans ma table alors une requête de ce type met un long moment à s'executer. Existe t'il une autre méthode plus rapide ? Merci.
non ! Mais il suffit d'indexer votre table comme ceci : CREATE INDEX X_MATABLE_KEY1_KEY2_NUMER ON MATABLE (Key1, Key2, NUM_VER)
Vous verrez alors que le requête va devenir instantannée !
A +
Fred BROUARD a écrit :
SELECT ... FROM MATABLE T WHERE NUM_VER = (SELECT MAX(NUM_VER) FROM MATABLE TT WHERE T.Key1 = TT.Key1 AND T.Key2 = TT.Key2)
A +
Kurt a écrit :
Bonjour,
Je me demandais s'il existe un moyen simple de résoudre le cas suivant. Je n'ai pas créer la base de donnée et ne peut la modifier. J'ai une table avec plein de données dont un champ date de creation(DAT_CRE) de format YYYYMMDD un champ Heure de création(TIM_CRE) de format hhmmss et enfin un champ de numéro de version(NUM_VER) de format N. Dans la table a laquelle j'ai acces j'ai des lignes presque identiques il se peut par exemple pour le champ nom il y ai une correction d'une faute d'ortographe et que Mr totos devienne Mr Toto par exemple. J'ai donc 3 lignes avec
(K) cette donnée fait partie de la clé primaire pour moi mais ne fait pas partie de pas celle de la table.
Dans ce cas, je souahiterai donc récuèrper la ligne Mr Toto donc la ligne avec Key1 = 1 Key2 = 2 et dont la valeur de NUM_VER est la plus haute, dans mon cas 2. Et donc fait cela pour toute ma table. Peut être plus simplement, je serai tenté de faire(je sais que cela est faux): SELECT Key1, Key2, NOM, Data1, ......, Data N, DAT_CRE , TIM_CRE, NUM_VER FROM MATABLE GROUP BY Key1, Key2,DAT_CRE, TIM_CRE Where Max(NUM_VER)
Comment m'y prendre en sql ? Existe t il aussi un moyen simple avec DTS ?
Je vous remercie d'avance.
Cordialement,
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Kurt a écrit :
Bonjour,
Merci pour cette solution à laquelle je venais de penser à l'instant
et qui en effet résoud mon problème :)
Mais le truc que j'ai oublier de mentionner c'est que j'ai plus de 200
000 lignes dans ma table alors une requête de ce type met un long
moment à s'executer.
Existe t'il une autre méthode plus rapide ?
Merci.
non ! Mais il suffit d'indexer votre table comme ceci :
CREATE INDEX X_MATABLE_KEY1_KEY2_NUMER ON MATABLE (Key1, Key2, NUM_VER)
Vous verrez alors que le requête va devenir instantannée !
A +
Fred BROUARD a écrit :
SELECT ...
FROM MATABLE T
WHERE NUM_VER = (SELECT MAX(NUM_VER)
FROM MATABLE TT
WHERE T.Key1 = TT.Key1
AND T.Key2 = TT.Key2)
A +
Kurt a écrit :
Bonjour,
Je me demandais s'il existe un moyen simple de résoudre le cas
suivant. Je n'ai pas créer la base de donnée et ne peut la modifier.
J'ai une table avec plein de données dont un champ date de
creation(DAT_CRE) de format YYYYMMDD un champ Heure de
création(TIM_CRE) de format hhmmss et enfin un champ de numéro de
version(NUM_VER) de format N.
Dans la table a laquelle j'ai acces j'ai des lignes presque identiques
il se peut par exemple pour le champ nom il y ai une correction d'une
faute d'ortographe et que Mr totos devienne Mr Toto par exemple.
J'ai donc 3 lignes avec
(K) cette donnée fait partie de la clé primaire pour moi mais ne fait
pas partie de pas celle de la table.
Dans ce cas, je souahiterai donc récuèrper la ligne Mr Toto donc la
ligne avec Key1 = 1 Key2 = 2 et dont la valeur de NUM_VER est la plus
haute, dans mon cas 2.
Et donc fait cela pour toute ma table.
Peut être plus simplement, je serai tenté de faire(je sais que cela
est faux):
SELECT Key1, Key2, NOM, Data1, ......, Data N, DAT_CRE , TIM_CRE,
NUM_VER
FROM MATABLE
GROUP BY Key1, Key2,DAT_CRE, TIM_CRE
Where Max(NUM_VER)
Comment m'y prendre en sql ?
Existe t il aussi un moyen simple avec DTS ?
Je vous remercie d'avance.
Cordialement,
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Merci pour cette solution à laquelle je venais de penser à l'instant et qui en effet résoud mon problème :) Mais le truc que j'ai oublier de mentionner c'est que j'ai plus de 200 000 lignes dans ma table alors une requête de ce type met un long moment à s'executer. Existe t'il une autre méthode plus rapide ? Merci.
non ! Mais il suffit d'indexer votre table comme ceci : CREATE INDEX X_MATABLE_KEY1_KEY2_NUMER ON MATABLE (Key1, Key2, NUM_VER)
Vous verrez alors que le requête va devenir instantannée !
A +
Fred BROUARD a écrit :
SELECT ... FROM MATABLE T WHERE NUM_VER = (SELECT MAX(NUM_VER) FROM MATABLE TT WHERE T.Key1 = TT.Key1 AND T.Key2 = TT.Key2)
A +
Kurt a écrit :
Bonjour,
Je me demandais s'il existe un moyen simple de résoudre le cas suivant. Je n'ai pas créer la base de donnée et ne peut la modifier. J'ai une table avec plein de données dont un champ date de creation(DAT_CRE) de format YYYYMMDD un champ Heure de création(TIM_CRE) de format hhmmss et enfin un champ de numéro de version(NUM_VER) de format N. Dans la table a laquelle j'ai acces j'ai des lignes presque identiques il se peut par exemple pour le champ nom il y ai une correction d'une faute d'ortographe et que Mr totos devienne Mr Toto par exemple. J'ai donc 3 lignes avec
(K) cette donnée fait partie de la clé primaire pour moi mais ne fait pas partie de pas celle de la table.
Dans ce cas, je souahiterai donc récuèrper la ligne Mr Toto donc la ligne avec Key1 = 1 Key2 = 2 et dont la valeur de NUM_VER est la plus haute, dans mon cas 2. Et donc fait cela pour toute ma table. Peut être plus simplement, je serai tenté de faire(je sais que cela est faux): SELECT Key1, Key2, NOM, Data1, ......, Data N, DAT_CRE , TIM_CRE, NUM_VER FROM MATABLE GROUP BY Key1, Key2,DAT_CRE, TIM_CRE Where Max(NUM_VER)
Comment m'y prendre en sql ? Existe t il aussi un moyen simple avec DTS ?
Je vous remercie d'avance.
Cordialement,
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************