【问题标题】:SQL SERVER 2005 getting average usages for a year split into 30 day periodsSQL SERVER 2005 将一年的平均使用量分为 30 天
【发布时间】:2013-12-11 19:50:25
【问题描述】:

我有一个表“UserId”、“Date”、“Application”,它记录了用户使用应用程序的日期和时间,我设法按月将其拆分为过去一年的平均使用量。但是,我被要求按 30 天的计费周期而不是几个月来拆分。谁能帮助我如何有效地将数据拆分为一个表格,该表格显示每个应用程序和每 30 天的平均用户数。

这是按月拆分应用程序的查询

select Month(UsageLog.[Date]) as [Month], Year(UsageLog.[Date]) as [Year],
(Count(UsageLog.UserName)/COUNT(Distinct UsageLog.[Date])) as NumUsers,
UsageLog.Application
From Licensing.dbo.Table_UsageLog 
where UsageLog.[Date] > DATEADD(YEAR,-1,GetDate())
Group By Month(UsageLog.[Date]), Year(UsageLog.[Date]), UsageLog.Application 

【问题讨论】:

  • 您的 30 天计费周期是如何定义的 - 每个用户的注册时间是否不同?如果用户 A 于 2013 年 1 月 1 日注册,用户 B 于 2013 年 1 月 15 日注册,他们的计费周期会分别延长至 2013 年 2 月 1 日和 2013 年 2 月 15 日吗?
  • 那么上面的查询有什么问题?
  • 好问题,摘要是从一年前的当前日期开始的 30 天。

标签: sql sql-server-2005


【解决方案1】:

如果您在两年中有几个月(假设是年中),则您的查询不正确,您不能有 ORDER!!!!

您必须 CAST 为 MM-YYYY 或使用我的建议 + '-' +

试试这个

select Month(UsageLog.[Date])   + '-' + Year(UsageLog.[Date]) as MonthYear ,
  Count(UsageLog.Application ) as NumUsers,
 UsageLog.Application
 From Licensing.dbo.Table_UsageLog 
 where UsageLog.[Date] > DATEADD(YEAR,-1,GetDate())
 Group By  Month(UsageLog.[Date])   + '-' + Year(UsageLog.[Date]) , UsageLog.Application
 order by  Month(UsageLog.[Date])   + '-' + Year(UsageLog.[Date]) DESC

您可以按月(UsageLog.[Date]) + '-' + Year(UsageLog.[Date]) 的顺序使用它

【讨论】:

  • 这给出了像 2025 这样的值的月份年份,平均值看起来不对,那里不正确
  • 你在这个月计数 12-2013 CNT UsageLog.Application ;您需要投射您的 UsageLog.Application 名称必须是固定的;首先看 GROUP BY UsageLog.Application 有多少行,这必须首先工作
  • 刚刚在 excel 中检查的平均值是有效的,注意你放弃了使它们成为平均值的计算我不知道这是否有影响?
猜你喜欢
  • 1970-01-01
  • 2017-03-07
  • 2023-03-22
  • 2016-11-30
  • 1970-01-01
  • 2020-11-20
  • 2021-10-23
  • 1970-01-01
  • 2015-04-03
相关资源
最近更新 更多