Une autre option serait d'utiliser les fonctions de DATEPART SQL comme ceci:
SELECT
DAY(TimeStamp), MONTH(TimeStamp), YEAR(TimeStamp),
DATEPART(HOUR, TimeStamp),
COUNT(*)
FROM
dbo.Products
GROUP BY
DAY(TimeStamp), MONTH(TimeStamp), YEAR(TimeStamp),
DATEPART(HOUR, TimeStamp)
ORDER BY
COUNT(*) DESC
Cela vous donne pas seulement le nombre maximum de vues pour une heure donnée, mais chacun d'entre eux, triés par la fréquence. Rappelez-vous: autre que la solution de RexM, elle est basée sur la partie "heure" de votre "horodatage" - donc si vous avez pas mal de vues à 7h59 et une autre à 8h01, dans ma solution, elles ne le seraient pas t être montré ensemble (puisque l'un est l'heure = 7 et l'autre l'heure = 8).
Si vous avez besoin de l'approche «n'importe quelle période de 60 minutes», utilisez l'idée de base de RexM (DATEDIFF avec les minutes < = 60).
Marc
Belle alternative. J'ai réalisé après avoir fini de brosser la poussière de mon cerveau SQL que l'OP voulait LINQ à SQL, pas SQL.(Il est aussi explicitement dit «n'importe quelle période de 60 minutes») –
Ne voyez aucune mention de Linq-to-SQL (autre que l'étiquette), et oui, j'ai remarqué la "durée de 60 minutes" - c'est un peu plus compliqué bien que. Peut-être que cette approche fera - nous verrons - jusqu'à l'OP pour faire un appel :-) –