Il faut que je r=E9cup=E8re pour chaque num=E9ro de commande (CD_NUMERO)
la date la plus r=E9cente (CD_DATE) ainsi que l'heure la plus r=E9cente
(CD_HEURE) de la date la plus r=E9cente, pour tous les CD_CODE=3D'SIG'. En
fait une commande n'est pas unique : il y a plusieurs lignes contenant
le m=EAme CD_NUMERO. Une commande peut donc =EAtre pass=E9e plusieurs fois
le m=EAme jour (=E0 des heures diff=E9rentes. On a donc des CD_DATE =E9gaux
mais des CD_HEURES diff=E9rents) o=F9 =E0 des dates diff=E9rentes.
Apr=E8s plusieurs tentatives je s=E8che car je dois r=E9cup=E9rer 2 MAX
mais qui d=E9pendent l'un de l'autre et de plus cette table ne poss=E8de
pas d'ID unique qui permet d'identifier une ligne sp=E9cifiquement.
Il faut que je récupère pour chaque numéro de commande (CD_NUMERO) la date la plus récente (CD_DATE) ainsi que l'heure la plus récente (CD_HEURE) de la date la plus récente, pour tous les CD_CODE='SIG'. En fait une commande n'est pas unique : il y a plusieurs lignes contenant le même CD_NUMERO. Une commande peut donc être passée plusieurs fois le même jour (à des heures différentes. On a donc des CD_DATE égaux mais des CD_HEURES différents) où à des dates différentes.
Après plusieurs tentatives je sèche car je dois récupérer 2 MAX mais qui dépendent l'un de l'autre et de plus cette table ne possède pas d'ID unique qui permet d'identifier une ligne spécifiquement.
Si quelqu'un a la solution je suis preneur.
Merci d'avance !
KT
Quels sont les types de CD_DATE et CD_HEURE ? Quelle base de données ?
kt.marti@wanadoo.fr a pensé très fort :
Bonjour,
j'ai la table COMMANDE composée des champs suivants :
Il faut que je récupère pour chaque numéro de commande (CD_NUMERO)
la date la plus récente (CD_DATE) ainsi que l'heure la plus récente
(CD_HEURE) de la date la plus récente, pour tous les CD_CODE='SIG'. En
fait une commande n'est pas unique : il y a plusieurs lignes contenant
le même CD_NUMERO. Une commande peut donc être passée plusieurs fois
le même jour (à des heures différentes. On a donc des CD_DATE égaux
mais des CD_HEURES différents) où à des dates différentes.
Après plusieurs tentatives je sèche car je dois récupérer 2 MAX
mais qui dépendent l'un de l'autre et de plus cette table ne possède
pas d'ID unique qui permet d'identifier une ligne spécifiquement.
Si quelqu'un a la solution je suis preneur.
Merci d'avance !
KT
Quels sont les types de CD_DATE et CD_HEURE ?
Quelle base de données ?
Il faut que je récupère pour chaque numéro de commande (CD_NUMERO) la date la plus récente (CD_DATE) ainsi que l'heure la plus récente (CD_HEURE) de la date la plus récente, pour tous les CD_CODE='SIG'. En fait une commande n'est pas unique : il y a plusieurs lignes contenant le même CD_NUMERO. Une commande peut donc être passée plusieurs fois le même jour (à des heures différentes. On a donc des CD_DATE égaux mais des CD_HEURES différents) où à des dates différentes.
Après plusieurs tentatives je sèche car je dois récupérer 2 MAX mais qui dépendent l'un de l'autre et de plus cette table ne possède pas d'ID unique qui permet d'identifier une ligne spécifiquement.
Si quelqu'un a la solution je suis preneur.
Merci d'avance !
KT
Quels sont les types de CD_DATE et CD_HEURE ? Quelle base de données ?
Etienne SOBOLE
le même CD_NUMERO. Une commande peut donc être passée plusieurs fois le même jour (à des heures différentes. On a donc des CD_DATE égaux mais des CD_HEURES différents) où à des dates différentes.
peut etre une conversion en entier des date et un addition subtile ;) j'avoue que je ne sais pas faire mais un truc genre max(CD_DATE + CD_HEURES) ca ne marche pas?
peut etre faut il tout convertir en timestamp avant... a creuser.
Etienne
le même CD_NUMERO. Une commande peut donc être passée plusieurs fois
le même jour (à des heures différentes. On a donc des CD_DATE égaux
mais des CD_HEURES différents) où à des dates différentes.
peut etre une conversion en entier des date et un addition subtile ;)
j'avoue que je ne sais pas faire mais un truc genre
max(CD_DATE + CD_HEURES)
ca ne marche pas?
peut etre faut il tout convertir en timestamp avant...
a creuser.
le même CD_NUMERO. Une commande peut donc être passée plusieurs fois le même jour (à des heures différentes. On a donc des CD_DATE égaux mais des CD_HEURES différents) où à des dates différentes.
peut etre une conversion en entier des date et un addition subtile ;) j'avoue que je ne sais pas faire mais un truc genre max(CD_DATE + CD_HEURES) ca ne marche pas?
peut etre faut il tout convertir en timestamp avant... a creuser.
Etienne
kt.marti
CD_DATE et CD_HEURE sont respectivement des char(8) et char(6). Par exemple CD_DATE='20011001' et CD_HEURE='111018'. Je travaille sur SQL Server 2000. Merci !
CD_DATE et CD_HEURE sont respectivement des char(8) et char(6).
Par exemple CD_DATE='20011001' et CD_HEURE='111018'.
Je travaille sur SQL Server 2000.
Merci !
CD_DATE et CD_HEURE sont respectivement des char(8) et char(6). Par exemple CD_DATE='20011001' et CD_HEURE='111018'. Je travaille sur SQL Server 2000. Merci !
kt.marti
En fait j'avais fait une requête en cherchant un MAX(CD_DATE+CD_HEURE) avec un GROUP BY sur CD_NUMERO. Ca fonctionne mais mon problème est ensuite de pouvoir récupérer toutes les infos de la table ...
En fait j'avais fait une requête en cherchant un MAX(CD_DATE+CD_HEURE)
avec un GROUP BY sur CD_NUMERO. Ca fonctionne mais mon problème est
ensuite de pouvoir récupérer toutes les infos de la table ...
En fait j'avais fait une requête en cherchant un MAX(CD_DATE+CD_HEURE) avec un GROUP BY sur CD_NUMERO. Ca fonctionne mais mon problème est ensuite de pouvoir récupérer toutes les infos de la table ...
Etienne SOBOLE
En fait j'avais fait une requête en cherchant un MAX(CD_DATE+CD_HEURE) avec un GROUP BY sur CD_NUMERO. Ca fonctionne mais mon problème est ensuite de pouvoir récupérer toutes les infos de la table ...
hum. je dois dire que je comprends pas. tu met tout les champs dans le group by !!! il est ou le probleme?
Etienne
En fait j'avais fait une requête en cherchant un MAX(CD_DATE+CD_HEURE)
avec un GROUP BY sur CD_NUMERO. Ca fonctionne mais mon problème est
ensuite de pouvoir récupérer toutes les infos de la table ...
hum.
je dois dire que je comprends pas.
tu met tout les champs dans le group by !!! il est ou le probleme?
En fait j'avais fait une requête en cherchant un MAX(CD_DATE+CD_HEURE) avec un GROUP BY sur CD_NUMERO. Ca fonctionne mais mon problème est ensuite de pouvoir récupérer toutes les infos de la table ...
hum. je dois dire que je comprends pas. tu met tout les champs dans le group by !!! il est ou le probleme?
Etienne
kt.marti
Le problème est que je ne veux faire un group by que sur le champ CD_NUMERO. Si j'ajoute tous les champs le résulat de ma requête est faux car il prend en compte tous les champs alors que je ne veux grouper que par numéro de commande ...
Le problème est que je ne veux faire un group by que sur le champ
CD_NUMERO. Si j'ajoute tous les champs le résulat de ma requête est
faux car il prend en compte tous les champs alors que je ne veux
grouper que par numéro de commande ...
Le problème est que je ne veux faire un group by que sur le champ CD_NUMERO. Si j'ajoute tous les champs le résulat de ma requête est faux car il prend en compte tous les champs alors que je ne veux grouper que par numéro de commande ...
Antoun
wrote:
Bonjour,
j'ai la table COMMANDE composée des champs suivants :
Il faut que je récupère pour chaque numéro de commande (CD_NUMERO) la date la plus récente (CD_DATE) ainsi que l'heure la plus récente (CD_HEURE) de la date la plus récente, pour tous les CD_CODE='SIG'. En fait une commande n'est pas unique : il y a plusieurs lignes contenant le même CD_NUMERO. Une commande peut donc être passée plusieurs fois le même jour (à des heures différentes. On a donc des CD_DATE égaux mais des CD_HEURES différents) où à des dates différentes.
Après plusieurs tentatives je sèche car je dois récupérer 2 MAX mais qui dépendent l'un de l'autre et de plus cette table ne possède pas d'ID unique qui permet d'identifier une ligne spécifiquement.
Si quelqu'un a la solution je suis preneur.
Merci d'avance !
KT
Pour cela, il te faut une sous-requête qui détermine la date-heure et une requête qui lit les autres infos... Ton idée d'utiliser CD_DATE+CD_HEURE est bonne, elle permet d'éviter une sous-requête supplémentaire.
Comme je ne me rappelle plus plus trop si on doit/peut mettre les AS en SQL Server, je les ai mis partout pour plus de clarté.
SELECT C.* FROM COMMANDE C INNER JOIN ( SELECT C2.CD_NUMERO, MAX(C2.CD_DATE + C2.CD_HEURE) AS DateHeure FROM COMMANDE C2 ) AS D ON C.CD_NUMERO = D.CD_NUMERO AND C.CD_DATE + C.CD_HEURE = D.CD_DATE + D.CD_HEURE WHERE CD_CODE = 'SIG'
kt.marti@wanadoo.fr wrote:
Bonjour,
j'ai la table COMMANDE composée des champs suivants :
Il faut que je récupère pour chaque numéro de commande (CD_NUMERO)
la date la plus récente (CD_DATE) ainsi que l'heure la plus récente
(CD_HEURE) de la date la plus récente, pour tous les CD_CODE='SIG'. En
fait une commande n'est pas unique : il y a plusieurs lignes contenant
le même CD_NUMERO. Une commande peut donc être passée plusieurs fois
le même jour (à des heures différentes. On a donc des CD_DATE égaux
mais des CD_HEURES différents) où à des dates différentes.
Après plusieurs tentatives je sèche car je dois récupérer 2 MAX
mais qui dépendent l'un de l'autre et de plus cette table ne possède
pas d'ID unique qui permet d'identifier une ligne spécifiquement.
Si quelqu'un a la solution je suis preneur.
Merci d'avance !
KT
Pour cela, il te faut une sous-requête qui détermine la date-heure et
une requête qui lit les autres infos... Ton idée d'utiliser
CD_DATE+CD_HEURE est bonne, elle permet d'éviter une sous-requête
supplémentaire.
Comme je ne me rappelle plus plus trop si on doit/peut mettre les AS en
SQL Server, je les ai mis partout pour plus de clarté.
SELECT C.*
FROM COMMANDE C
INNER JOIN
( SELECT C2.CD_NUMERO, MAX(C2.CD_DATE + C2.CD_HEURE) AS DateHeure
FROM COMMANDE C2
) AS D
ON C.CD_NUMERO = D.CD_NUMERO
AND C.CD_DATE + C.CD_HEURE = D.CD_DATE + D.CD_HEURE
WHERE CD_CODE = 'SIG'
Il faut que je récupère pour chaque numéro de commande (CD_NUMERO) la date la plus récente (CD_DATE) ainsi que l'heure la plus récente (CD_HEURE) de la date la plus récente, pour tous les CD_CODE='SIG'. En fait une commande n'est pas unique : il y a plusieurs lignes contenant le même CD_NUMERO. Une commande peut donc être passée plusieurs fois le même jour (à des heures différentes. On a donc des CD_DATE égaux mais des CD_HEURES différents) où à des dates différentes.
Après plusieurs tentatives je sèche car je dois récupérer 2 MAX mais qui dépendent l'un de l'autre et de plus cette table ne possède pas d'ID unique qui permet d'identifier une ligne spécifiquement.
Si quelqu'un a la solution je suis preneur.
Merci d'avance !
KT
Pour cela, il te faut une sous-requête qui détermine la date-heure et une requête qui lit les autres infos... Ton idée d'utiliser CD_DATE+CD_HEURE est bonne, elle permet d'éviter une sous-requête supplémentaire.
Comme je ne me rappelle plus plus trop si on doit/peut mettre les AS en SQL Server, je les ai mis partout pour plus de clarté.
SELECT C.* FROM COMMANDE C INNER JOIN ( SELECT C2.CD_NUMERO, MAX(C2.CD_DATE + C2.CD_HEURE) AS DateHeure FROM COMMANDE C2 ) AS D ON C.CD_NUMERO = D.CD_NUMERO AND C.CD_DATE + C.CD_HEURE = D.CD_DATE + D.CD_HEURE WHERE CD_CODE = 'SIG'
kt.marti
Merci beaucoup pour ta requête ... mais j'obtiens les messages d'erreur suivants : 'CD_DATE' : Nom de colonne incorrecte 'CD_HEURE' : Nom de colonne incorrecte
Il précise que cette erreur se situe à la première ligne. J'obtiens la même chose si j'écris tous les noms de champs et en omettant CD_DATE et CD_HEURE.
PS : SQL Server accepte bien les AS
Merci beaucoup pour ta requête ... mais j'obtiens les messages
d'erreur suivants :
'CD_DATE' : Nom de colonne incorrecte
'CD_HEURE' : Nom de colonne incorrecte
Il précise que cette erreur se situe à la première ligne. J'obtiens
la même chose si j'écris tous les noms de champs et en omettant
CD_DATE et CD_HEURE.
Merci beaucoup pour ta requête ... mais j'obtiens les messages d'erreur suivants : 'CD_DATE' : Nom de colonne incorrecte 'CD_HEURE' : Nom de colonne incorrecte
Il précise que cette erreur se situe à la première ligne. J'obtiens la même chose si j'écris tous les noms de champs et en omettant CD_DATE et CD_HEURE.