【问题标题】:Calculate the avg for consecutive 30 days data计算连续 30 天数据的平均值
【发布时间】:2016-08-10 13:23:48
【问题描述】:

我正在寻找可以提供过去 30 天和持续到最后 30 天数据的查询。

例如 - 如果今天是 6/30 den,我应该能够在 5/30 和 4/30 之前提取数据。我已经尝试了下面的代码,但它只提供了过去 30 天的数据

SELECT Avg(Sub.Ticket) AS Average2
FROM (SELECT Fulldate, COUNT(Ticket_Number) AS Ticket
      FROM RawData
      GROUP BY Fulldate
     )  AS sub
WHERE ((([RawData].[FullDate])>=#6/30/2016#-30-30));

【问题讨论】:

  • 我不清楚您要准确计算什么。这是过去 30 天的 AVG 和过去 30+30 (=60) 天的另一个 AVG?
  • 过去 30 天的平均值和之前 30 天的另一个平均值
  • 感谢您的澄清。请参阅下面的答案。
  • GROUP BY datediff("d", [RawData].[FullDate], #6/30/2016#) \ 30 这是整数除法。

标签: sql ms-access days


【解决方案1】:

如果你想要 1 行 2 列的结果:

SELECT 
  AVG(sub.TicketLast30) AS AverageLast30,
  AVG(sub.TicketPrev30) AS AveragePrev30
FROM (
  SELECT Fulldate, 
    COUNT(IIF(Fulldate BETWEEN (DATE()-30) AND DATE(), Ticket_Number, 0) AS TicketLast30,
    COUNT(IIF(Fulldate BETWEEN (DATE()-60) AND (DATE()-30), Ticket_Number, 0) AS TicketPrev30
  FROM RawData
  WHERE Fulldate BETWEEN (DATE()-60) AND DATE()
  GROUP BY Fulldate
) AS sub

如果您希望结果为 2 行 1 列:

SELECT 
  AVG(sub.Ticket) AS Average30
FROM (
  SELECT Fulldate, 
    COUNT(Ticket_Number) AS Ticket
  FROM RawData
  WHERE Fulldate BETWEEN (DATE()-60) AND (DATE()-30)
  GROUP BY Fulldate
) AS sub
UNION ALL
SELECT 
  AVG(sub.Ticket) AS Average30
FROM (
  SELECT Fulldate, 
    COUNT(Ticket_Number) AS Ticket
  FROM RawData
  WHERE Fulldate BETWEEN (DATE()-30) AND DATE()
  GROUP BY Fulldate
 ) AS sub

【讨论】:

  • (cc: @Biplab1985 ) 这些查询是用 T-SQL(用于 Microsoft SQL Server)而不是 Access SQL 编写的。
  • 这么想,任何访问建议
  • 让我换个说法 - 假设我需要按上个月的日期查找门票的平均值。有办法吗?
  • 编辑查询以使用 Access 语法,因此在 GETDATE() 中插入了 DATE()。 GROUP BY 和 AVG 聚合也应该在 Access 中工作。
  • BEETWEEN 需要修复'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-11
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多