Subset ? [SQLSERVER] - SQL/NoSQL - Programmation
Marsh Posté le 31-08-2010 à 11:27:00
Code :
|
(pas testé... )
Marsh Posté le 31-08-2010 à 12:22:41
j'ai fait un truc comme ça:
Code :
|
et ça marche très bien, merci
Maintenant, deuxième problème: il y a un SUM() dans le select, du coup il n'y a plus rien qui marche
C'est toujours la même problématique avec les group by. Et la je ne peux pas faire le système du inner join parce que les rows se trouvent dans ... les inner join de la query.
Marsh Posté le 31-08-2010 à 13:17:40
Bon, on va faire autrement
Soit la requête simplifiée ci dessous:
Code :
|
qui me donne le résultat suivant: (je ne mets que les deux premières semaines pour des raisons évidentes )
|
Je voudrais le top 5 par semaine (week_week) de la somme des visiteurs par prod_id
Marsh Posté le 31-08-2010 à 13:42:55
Code :
|
La table #truc est le resultat de ta query.
Ca devrai donner ca (mais pas testé vu que j'ai pas tes tables):
Code :
|
Voila la resultat:
Code :
|
Marsh Posté le 31-08-2010 à 14:12:55
Tu es formidable
j'avais commencé un truc du genre, mais
avec un select distinct sans group by (j'ai du mal avec le fait de recopier les trucs du select)
puis avec le ROW_NUMBER()... dans le select * parce que j'avais tenté de faire un ORDER BY week_week, visitors DESC mais ça ne marche pas
Et puis encore un select * qui engloble le tout pour pouvoir faire WHERE rOrder <= 5
Bref, du bricolage
Je prends ta solution qui est bien plus claire.
Marsh Posté le 31-08-2010 à 15:46:54
Hum, c'est encore moi
Alors j'ai oublié dans mon select de prendre le MIN(d.date) pour chaque week_week, encore une aggrégation
j'ai donc tenté de faire un select ... MIN(d.date) ... group by ..., d.date
Mais ça ne va pas car la date min du group by peut être autre chose que la date min du week_week
J'ai donc eu la merveilleuse idée de faire un
MIN(d.date) OVER (PARTITION BY d.week_week) as minDate
Ca marche mais il ne me les regroupe plus par prod_id
Comment se fait-ce ?
Marsh Posté le 31-08-2010 à 16:06:24
C'est parce que je DOIS mettre un d.date dans le group by et donc il fait des sum par d.date aussi
Comment on se sort de ça ?
Marsh Posté le 01-09-2010 à 08:31:21
Il ne faut pas faire un MIN(d.date) si le d.date est dans le Group By.
Quand les queries deviennent trop compliquée comme ca, c'est des fois mieux de les faire en plusieurs partie.
Une query de base dans une table temporaire, puis reutiliser cette table pour afficher les choses correctement ou refaire d'autre group by.
Marsh Posté le 01-09-2010 à 16:58:08
Bon, hum
je laisse tomber le problème de date pour le moment parce que j'ai un problème plus grave.
On ne veut pas le top 5 sur la semaine. On veut le top 5 de tous les temps, Puis on prend les sum par semaine.
J'ai donc fait la chose suivante:
Code :
|
Y a juste un minuscule problème.
C'est que si n'y a pas de visiteurs pour une semaine. Il n'y a pas de record. Et il faut absolument qu'il me sorte un record avec visitors = 0
C'est possible ?
Marsh Posté le 31-08-2010 à 10:28:51
Bonjour
J'ai une requête comme celle-ci:
C'est le order by qui est important ici.
Le résultat est le suivant:
C'est fantastique SAUF qu'il me faut le top 5 des visits par jour (date)
Il me semble que je ne peux pas faire de group by sinon je vais me retrouver avec 2 records au lieu de 10.
Comment je peux m'en sortir ?