J'ai ces données dans ma table:Intéressant requête SQL
onum amt odate cnum snum
3001 18,69 1990-03-10 00:00:00.000 2008 1007
3002 1900,10 1990-03-10 00:00:00.000 2007 1004
3003 767,19 1990-03-10 00:00:00.000 2001 1001
3005 5160,45 1990-03-10 00:00:00.000 2003 1002
3006 1098,16 1990-03-10 00:00:00.000 2008 1007
3007 75,75 1990-03-10 00:00:00.000 2004 1002
3008 4723,00 1990-05-10 00:00:00.000 2006 1001
3009 1713,23 1990-04-10 00:00:00.000 2002 1003
3010 1309,95 1990-06-10 00:00:00.000 2004 1002
3011 9891,88 1990-06-10 00:00:00.000 2006 1001
J'ai besoin obtenir ce résultat:
amt odate snum
5160,45 1990-03-10 00:00:00.000 1002
4723,00 1990-05-10 00:00:00.000 1001
9891,88 1990-06-10 00:00:00.000 1001
qui est je sélectionne le maximum amt
le chaque jour odate
, mais avec l'affichage du vendeur snum
si j'écris ceci:
SELECT MAX(amt), odate, snum
FROM [Understanding].[dbo].[Orders]
GROUP BY odate, snum
la sortie est erronée car elle affiche les groupes par jours et vendeurs.
Je ne pourrai jamais me habituer au fait que SQL Server nécessite un point-virgule au début d'une déclaration ...;) –
@a_horse_with_no_name - Eh bien, c'est en fait le dernier caractère de la déclaration avant. L'instruction 'merge' nécessite qu'elle se termine par un point-virgule. 'with' exige que l'instruction précédente soit terminée par un point-virgule. Si SQL Server exigeait que chaque instruction soit terminée par un point-virgule, elle serait beaucoup plus cohérente. Peut-être le fera-t-il dans une future version. –
@a_horse_with_no_name: 'WITH' peut être utilisé dans divers contextes dans SQL Server. Quand il introduit une (liste de) CTE (s), il doit être au début d'une déclaration, dans d'autres cas il est supposé être ailleurs mais pas * au début. Le point-virgule supprime simplement l'ambiguïté quant à la signification de 'WITH'. Vous n'avez pas besoin de mettre un point-virgule lorsqu'il n'y a pas d'instruction avant 'WITH' (dans le contexte de la définition CTE). –