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:
Code :
SELECT top 10 [visitor_id] ,max([first_request]) AS fmax ,interests FROM [visitors] WHERE interests IS NOT NULL GROUP BY visitor_id ORDER BY visitor_id DESC
|
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:
Code :
SELECT top 10 [visitor_id] ,max([first_request]) AS fmax ,interests FROM [EVO5_PHILIPS].[dbo].[visitors] WHERE interests IS NOT NULL GROUP BY visitor_id,interests ORDER BY visitor_id DESC
|
évidement c'est super lent et évidemment je me retrouve avec mes duplicates visitor_id
Je ne comprends rien