【问题标题】:Sum of revenue everyday, for last 30 days on each day每天过去 30 天每天的收入总和
【发布时间】:2014-05-16 00:27:46
【问题描述】:

我有一张简单的桌子。

 Date | Revenue
 5/1    12
 5/2    25
 5/3    93
 .
 .
 11/15  47

我正在尝试编写一个返回两列的查询。第一列是日期,每天,就像原始表格一样。第二列是 30-Day-Revenue,它是原始表格中“Revenue”列过去 30 天的总和,以显示的日期结束。当我们求和时有很多重叠。提前致谢!

【问题讨论】:

  • 你用的是什么数据库?
  • edit您的问题包含您正在使用的 DBMS 的标签以及您正在使用的 SQL 语句,这会导致“我们求和时有很多重叠”。谢谢。
  • 感谢您阅读我的问题。我只对逻辑感兴趣,而不是确切的查询。我认为使用标准 SQL 中的任何内容都应该没问题。

标签: sql


【解决方案1】:

我有一个替代解决方案(假设您的表名为revenue_table):

SELECT a.Date, SUM(b.Revenue)
FROM revenue_table a, revenue_table b
WHERE b.Date <= a.Date AND b.Date > a.Date - 30
GROUP BY a.Date;

【讨论】:

  • 谢谢!你的逻辑对我帮助最大。感谢您的帮助!
【解决方案2】:
SELECT table1.Date, table1.Revenue, Past30DayRevenue = SUM(table2.Revenue)
FROM    insert_your_table_name_here table1
        JOIN insert_your_table_name_here table2 ON DATEDIFF(day, table2.Date, table1.Date) BETWEEN 0 AND 29
GROUP BY table1.Date, table1.Revenue
ORDER BY table1.Date;

【讨论】:

    【解决方案3】:

    您可以使用subqueries 来执行此操作。例如

    SELECT outer.date, (SELECT SUM(inner.revenue) 
                        FROM table inner 
                        WHERE inner.date > outer.date-30) AS thirtydayrevenue
    FROM table outer
    

    【讨论】:

    • 我会试试看的!
    猜你喜欢
    • 2020-06-29
    • 2022-01-18
    • 2013-07-27
    • 1970-01-01
    • 2016-11-30
    • 2019-07-18
    • 2011-03-05
    • 2022-10-07
    • 1970-01-01
    相关资源
    最近更新 更多