Что касается визуализации, я знаю, что это не периодическая выборка, о которой вы говорите, но я бы посмотрел на все строки для пользователя и выбрал интервал, SUM в пределах сегментов и показал бы на гистограмме или подобном , Это показало бы реальное «распределение», так как многие случаи в пределах временного интервала могут быть существенными.
SELECT DATEADD(day, DATEDIFF(day, 0, timefield), 0) AS bucket -- choose an appropriate granularity (days used here)
,COUNT(*)
FROM entries
WHERE uid = ?
GROUP BY DATEADD(day, DATEDIFF(day, 0, timefield), 0)
ORDER BY DATEADD(day, DATEDIFF(day, 0, timefield), 0)
Или, если вам не нравится то, как вы должны повторять себя, или если вы играете с различными группами, и хотите анализировать результаты по многим пользователям в 3-D (измерьте по Z против x, yid, bucket):
SELECT uid
,bucket
,COUNT(*) AS measure
FROM (
SELECT uid
,DATEADD(day, DATEDIFF(day, 0, timefield), 0) AS bucket
FROM entries
) AS buckets
GROUP BY uid
,bucket
ORDER BY uid
,bucket
Если бы я хотел построить трехмерный график, я бы, вероятно, определил способ упорядочения пользователей в соответствии с какой-либо значимой общей метрикой для пользователя.