简体   繁体   中英

How to sum previous month values and current month values in SQL query

Please help me to solve this issue. I have to write a query to get the sum of previous month values and current month values but not able to get the solution.

Here is an image for your reference sum of actual count column values I need the result.

在此处输入图片说明

In Oracle you would use the following, could be not completely correct on the case statement:

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

The previous month is more or less the same using another case statement and ADD_MONTHS .

There are two ways to do this in Tableau :

First Way .

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

Second Way :

Create a calc field Total_event as :

WINDOW_SUM(SUM([Event Count]))

Compute the Window_sum as COMPUTE USING EVENT NAME .

In tableau -> Create a calculated field ->

// This is for previous month

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

//For current month ->

if Month([date]) = Month(TODAY()) then

sum([Value])

end

You will 2 fields returning previous month's sum and current month's sum, You can then use them as you wish.

On sql end you may use

For Previous Month ->

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

For current Month ->

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

If you CAN USE sql AND YOU actually need the previous month and not just all months summed by EventName then you could use LAG. I made the assumption that you are summing by EventName and you only want the current EventName and previous 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

This will produce output like this

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM