Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Is there any way to reset sum cumulative / running total every month in BigQuery?

I want to calculate a month-to-date profit with the current date 15th, so it will sum the profit every month until the 15th day. Is there any way/idea to reset the sum cumulative / running total every month in bigquery? i want to filter the windows function so that every 1st day in the month will reset the sum cumulative in the profit_cumulative column.

so I want the result to be like this :

Date Categories Profit Profit_Cumulative
2022-06-14 A 295.62 6350.58
2022-06-15 A 459.80 6810.38
2022-07-01 A 501.03 501.03
2022-07-02 A 258.97 760.0

instead of this:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Date Categories Profit Profit_Cumulative
2022-06-14 A 295.62 6350.58
2022-06-15 A 459.80 6810.38
2022-07-01 A 501.03 7311.72
2022-07-02 A 258.97 7570.69

and this is my code :

  b AS (
  WITH
    a AS (
    SELECT
      DATE_TRUNC(DATE(created_at),day) AS date_,
      EXTRACT(YEAR
      FROM
        created_at) AS year,
      EXTRACT(MONTH
      FROM
        created_at) AS month,
      EXTRACT(DAY
      FROM
        created_at) AS day,
      SAFE_SUBTRACT(retail_price, cost) AS profit,
      products.category AS product_category
    FROM
      `bigquery-public-data.thelook_ecommerce.order_items` orderitems
    INNER JOIN
      `bigquery-public-data.thelook_ecommerce.products` products
    ON
      orderitems.product_id = products.id
      AND created_at >= '2022-06-01 00:00:00 UTC'
      AND created_at <='2022-08-15 23:59:59 UTC'
    GROUP BY
      date_,
      year,
      month,
      day,
      product_category,
      profit )
  SELECT
    a.date_ AS Date,
    a.year,
    a.month,
    a.day,
    a.product_category AS Product_Categories,
    SUM(a.profit) AS Profit
  FROM
    a
  WHERE
    a.day <= 15
  GROUP BY
    a.date_,
    a.year,
    a.month,
    a.day,
    a.product_category
  ORDER BY
    a.date_,
    year,
    month,
    day,
    a.product_category)
SELECT
  Date,
  b.year,
  b.month,
  b.day,
  b.Product_Categories,
  b.profit,
  SUM(Profit) OVER(PARTITION BY product_categories ORDER BY date) AS profit_cumulative
FROM
  b```

>Solution :

I’ll try to solve it with this one line of code:

SUM(Profit) OVER(PARTITION BY month, product_categories ORDER BY date) AS profit_cumulative

add the ‘month’ in your partition by before product categories, so it will reset the cumulative sum every 1st day of the month.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading