group by [SQLSERVER] - SQL/NoSQL - Programmation
Marsh Posté le 19-08-2010 à 16:28:14
Si le server fait un group by visitor_id, il y a potentiellement plusieurs first_request et plusieurs interests par ligne retournée, il faut donc lui donner un moyen de choisir le quel (avec un aggregate).
Dans ton cas c'est un peu plus compliqué vu qu'il n'y a malheureusement pas moyen de lui demander de selectionner le record interests qui correspon au max(first_request), il faut ruser:
Code :
|
Marsh Posté le 19-08-2010 à 15:53:51
J'ai une table comme ça:
select top 10 [visitor_id],[first_request],[interests] from [visitors]
where interests is not null
order by visitor_id desc
visitor_id first_request interests
zzzg9omfiaaed 2010-07-23 19:07:19.000 300000138;56;300000021;23;300000137;20
zzzg9omfiaaed 2010-07-22 21:51:56.000 300000138;52;300000021;25;300000137;22
zzyvhymufy329 2010-08-08 13:59:45.000 300000205;82;30011;17
zzxxw0ecvs0ts 2010-07-26 15:28:45.000 300000205;60;30011;39
zzxunqcwfcg0h 2010-08-09 06:47:49.000 30017;93;300000205;6;30011;0
zzxunqcwfcg0h 2010-08-10 03:18:52.000 30017;50;300000205;41;30011;8
zzxunqcwfcg0h 2010-08-09 08:48:31.000 30017;49;300000205;41;30011;8
zzxhudlptox6v 2010-08-18 15:29:07.000 30011;68;300000205;31
zzxhudlptox6v 2010-08-09 18:13:25.000 30011;59;300000205;40
zzxhudlptox6v 2010-08-09 19:19:07.000 30011;63;300000205;36
on remarque qu'il y a des duplicates dans les visitor_id
Il faut les grouper en fonction du first_request le plus grand (tard)
J'ai donc eu la merveilleuse idée de faire ceci:
Mais ça ne marche pas.
Dans la doc ils disent (enfin ce que je comprends) que tout ce qui est dans le select et qui n'est pas une fonction d'aggregation doit se retrouver dans le group by.
Wait, wat ?
Ca veut dire que si j'ai 11 trucs dans le select et que je fais un MAX() sur un champ, les 10 autres doivent se retrouver dans le group by ??
Et si je fais cela:
évidement c'est super lent et évidemment je me retrouve avec mes duplicates visitor_id
Je ne comprends rien