【问题标题】:How to sum previous month values and current month values in SQL query如何在 SQL 查询中对上月值和当前月值求和
【发布时间】:2016-04-10 09:30:21
【问题描述】:

请帮我解决这个问题。我必须编写一个查询来获取上个月值和当前月份值的总和,但无法获得解决方案。

这是您的实际计数列值的参考总和的图像,我需要结果。

【问题讨论】:

  • 您要在 Tableau 还是 SQL 中使用这个?在 Tableau 中,我们可以轻松实现这一点。
  • 请在 Tableau 中给我解决方案。
  • 研究group by rollup

标签: sql sql-server tableau-api


【解决方案1】:

在 Oracle 中,您将使用以下语句,但在 case 语句中可能并不完全正确:

Select 
      Site, 
      sum(value * (case (date_transaction > trunc(sysdate, 'MM') then 1 else 0 end))
        volume_current_month
    from myTable
    where date_transaction between add_months(trunc(sysdate,'MM'),-1) and sysdate
    group by site

使用另一个case语句和ADD_MONTHS,上个月大致相同。

【讨论】:

  • 即使有提示,也很难正确获取格式。对不起。
  • 通常是CASE WHEN,但也许Oracle 接受这个?
  • 感谢您的回复,我会努力的。
【解决方案2】:

在 Tableau 中有两种方法可以做到这一点:

第一种方式。

Under Analysis --> Total --> Add All SubTotals .

第二种方式:

创建一个计算字段Total_event 为:

WINDOW_SUM(SUM([Event Count]))

将 Window_sum 计算为 COMPUTE USING EVENT NAME

【讨论】:

  • 我试过这个,但结果不是预期的,请参考链接 - “community.tableau.com”,我已经请求了画面中的问题,请检查问题是“如何找到与每个站点的上个月”
  • 我只需要当月和上月的实际计数总和或差值。
  • @KannanAthmanathan 你得到什么结果?根据您的要求,我得到了想要的结果。您可以分享您的问题的公共链接。
【解决方案3】:

如果您可以使用 sql 并且您实际上需要前一个月,而不仅仅是 EventName 汇总的所有月份,那么您可以使用 LAG。我假设您按 EventName 求和,并且您只想要当前 EventName 和以前的 EventNAme

WITH Summed
AS
(
SELECT * ,
LAG(EventCount) OVER (Partition BY EventName ORDER BY trialmonth) as PrevEvent
FROM dbo.Table1 
)

    SELECT *,
    SUM(PrevEvent+EventCount) AS SummedCount

     FROM summed
     GROUP BY   Site
          ,TrialMonth
          ,EventName
          ,EventCount
          , PrevEvent

这将产生这样的输出

Site    TrialMonth  EventName   EventCount  PrevEvent   SummedCount
12101   2001-10-15  Actual Count    4   NULL    NULL
12101   2001-10-15  Projected Count 8   NULL    NULL
12101   2001-11-15  Actual Count    6   4   10
12101   2001-11-15  Projected Count 9   8   17
12101   2001-12-15  Actual Count    0   6   6
12101   2001-12-15  Projected Count 10  9   19

http://sqlfiddle.com/#!6/8253f0/2

【讨论】:

    【解决方案4】:

    在tableau中->创建计算字段->

    //这是上个月的

    if [date] >= DATE("01" +"-" + (Month(TODAY())-1) +"-" + YEAR(TODAY()))
    
    and [date] <= DATE("31" +"-" + (Month(TODAY())-1) +"-" + YEAR(TODAY()))
    
    //if the month has 30 or 28 days it will check that there is no 31 and return null
    
    then
    
    sum([Value])
    
    end
    

    //当前月份->

    if Month([date]) = Month(TODAY()) then
    
    sum([Value])
    
    end
    

    您将 2 个字段返回上个月的总和和当前月份的总和,然后您可以随意使用它们。

    在 sql 端你可以使用

    上个月 ->

    select sum(value) from table_name t where DATE_PART('month',t.date)=DATE_PART('month',TIMESTAMPADD(mm,-1,GETDATE()))
    

    当前月份 ->

    select sum(value) from table_name t where DATE_PART('month',t.date)=DATE_PART('month',GETDATE()))
    

    【讨论】:

      猜你喜欢
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多