【问题标题】:Compare totalamount from previous month with current month result将上个月的总金额与当前月份的结果进行比较
【发布时间】:2018-02-18 19:44:55
【问题描述】:

我正在尝试比较当前月份和上个月之间的总金额。当新的一年出现时,问题就来了。

SELECT 
    currYear.orderyear, currYear.ordermonth, currYear.totalamount, 
    prevYear.totalamount
FROM 
    (SELECT 
         SUM(val) AS totalamount, 
         YEAR(orderdate) AS orderyear,
         MONTH(orderdate) AS ordermonth
     FROM 
         Sales.OrderValues 
     GROUP BY 
         YEAR(orderdate), MONTH(orderdate)
    ) AS currYear
LEFT JOIN 
    (SELECT 
         SUM(val) AS totalamount, 
         YEAR(orderdate) AS orderyear,
         MONTH(orderdate) AS ordermonth
     FROM 
         Sales.OrderValues 
     GROUP BY 
         YEAR(orderdate), MONTH(orderdate)
    ) AS prevYear ON currYear.orderyear = prevYear.orderyear
                  AND currYear.ordermonth = prevYear.ordermonth + 1
WHERE 
    currYear.orderyear = '2006' 
    OR currYear.orderyear = '2007'
ORDER BY 
    currYear.orderyear, currYear.ordermonth

table result

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    使用lag()。我不确定比较是什么,但这应该是大部分工作:

    SELECT YEAR(orderdate) as orderyear, MONTH(orderdate) as ordermonth,
           SUM(val) as totalamount, 
           LAG(SUM(val)) OVER (ORDER BY YEAR(orderdate), MONTH(orderdate)) as prev_totalamount
    FROM Sales.OrderValues 
    GROUP BY YEAR(orderdate), MONTH(orderdate);
    

    这确实假设您每个月都有数据,在这种情况下似乎很可能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      相关资源
      最近更新 更多