簡體   English   中英

如何計算 sql 中每一天的 YTD 平均值?

[英]how to calculate YTD average for each day in sql?

dates      product price

| 2020-01-01 | 筆記本電腦| 高分辨率照片| CLIPARTO 210 |

| 2020-01-01 | 電腦 | 100 |

| 2020-01-02 | 筆記本電腦| 高分辨率照片| CLIPARTO 150 |

| 2020-01-02 | 電腦 | 200 |

| 2020-01-03 | 筆記本電腦| 高分辨率照片| CLIPARTO 150 |

| 2021-01-01 | 電腦 | 110 |

| 2021-01-01 | 筆記本電腦| 高分辨率照片| CLIPARTO 220 |

2021-01-02 | 電腦 | 210 |

2021-01-02 | 筆記本電腦| 高分辨率照片| CLIPARTO 200 |

2021-01-03 | 電腦 | 260 |

有必要按產品計算自年初以來每天的平均值。 將日期 2020.01.02 添加到 2020.01.01 並除以 2(150+210)/2

嘗試類似:

SELECT product, AVG(price) FROM your_table WHERE dates >= '2021-01-01' GROUP BY product

SELECT dates, AVG(price) FROM your_table WHERE dates >= '2021-01-01' GROUP BY dates

SELECT product, dates, AVG(price) FROM your_table WHERE dates >= '2021-01-01' GROUP BY product, dates

我不知道 mysql 但在 sql 服務器和 oracle 數據庫中它會是這樣的。

WITH YOUR_TABLE_DATA (DATED,PRODUCT,PRICE)AS
(
  SELECT CAST('2020-01-01' AS DATE)DATED,'laptop',  210 UNION ALL 
  SELECT '2020-01-01',  'pc',  100 UNION ALL 
  SELECT'2020-01-02' , 'laptop',  150 UNION ALL 
  SELECT'2020-01-02',  'pc',  200 UNION ALL 
  SELECT'2020-01-03',  'laptop',  150 UNION ALL 
  SELECT '2021-01-01',  'pc' , 110 UNION ALL 
  SELECT'2021-01-01',  'laptop',  220 UNION ALL 
  SELECT'2021-01-02',  'pc',  210 UNION ALL 
  SELECT'2021-01-02',  'laptop',  200 UNION ALL 
  SELECT'2021-01-03',  'pc',  260  
)
SELECT C.DATED,C.PRODUCT,C.PRICE,
 AVG(C.PRICE)OVER(PARTITION BY C.PRODUCT ORDER BY C.DATED ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)X_AVG
FROM YOUR_TABLE_DATA AS C
ORDER BY C.PRODUCT,C.DATED

在 MySQL8.0 https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=b0124122a665975bf096ff02ea4832f0 上測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM