code_junkie

Calculate mode (or frequency) distribution of a value over time in SQL Server

Nov 12th, 2011
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1. WITH GroupedValues (Value, Frequency, Hour) AS
  2. (SELECT
  3. Value,
  4. COUNT(*) AS Frequency,
  5. DATEPART(hh, LogTime) AS Hour
  6. FROM
  7. dbo.MyValues
  8. GROUP BY
  9. Value,
  10. DATEPART(hh, LogTime))
  11.  
  12. SELECT
  13. MAX(Value) AS Value,
  14. a.Hour
  15. FROM
  16. GroupedValues a INNER JOIN
  17. (SELECT MAX(Frequency) AS MaxFrequency,
  18. Hour FROM GroupedValues GROUP BY Hour) b
  19. ON a.Frequency = b.MaxFrequency AND a.Hour = b.Hour
  20. GROUP BY
  21. a.Hour
  22.  
  23. SELECT
  24. MAX(Frequency) AS [Mode],
  25. [Year],[Month],[Day],[Hour]
  26. FROM
  27. (SELECT
  28. COUNT(*) AS Frequency,
  29. DatePart(yy, LogTime) as [Year],
  30. DatePart(mm, LogTime) as [Month],
  31. DatePart(dd, LogTime) as [Day],
  32. DatePart(hh, LogTime) as [Hour]
  33. FROM
  34. Values
  35. GROUP BY
  36. Value,
  37. DatePart(yy, LogTime),
  38. DatePart(mm, LogTime),
  39. DatePart(dd, LogTime),
  40. DatePart(hh, LogTime)
  41. ) foo
  42. GROUP By
  43. [Year],[Month],[Day],[Hour]
Add Comment
Please, Sign In to add comment