hive 过去3个月每月累计总计

5jvtdoz2  于 2023-04-20  发布在  Hive
关注(0)|答案(1)|浏览(159)
ID日期费用
1202201一百
1202112五十
1202111七十
1202110一百二十
1202110

所需输出:前3个月合计
| ID|日期|费用|轧制3个月|
| --------------|--------------|--------------|--------------|
| 1|202201|一百|二百二十|
| 1|202112|五十|二百四十|
| 1|202111|七十|一百九十五|
| 1|202110|一百二十|一百二十五|
| 1|202110|五|五|
所需输出:前3个月合计

ztigrdn8

ztigrdn81#

假设您确实需要SQL Server解决方案:

CREATE TABLE your_table (
  ID INT,
  [Date] date, --<< [Date] is a terrible column name & changed the data to be actual dates
  Cost INT
);

INSERT INTO your_table (ID, Date, Cost) VALUES (1, '20220101', 100);
INSERT INTO your_table (ID, Date, Cost) VALUES (1, '20211201', 50);
INSERT INTO your_table (ID, Date, Cost) VALUES (1, '20211101', 70);
INSERT INTO your_table (ID, Date, Cost) VALUES (1, '20211001', 120);
INSERT INTO your_table (ID, Date, Cost) VALUES (1, '20210901', 5); --<< changed to "09"
5 rows affected
SELECT ID, Date, Cost, 
       SUM(Cost) OVER (PARTITION BY ID ORDER BY [Date] ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS Rolling3Months
FROM your_table
order by [date] DESC

| ID|日期|费用|轧制3个月|
| - -------------|- -------------|- -------------|- -------------|
| 1|2022 - 01 - 01 2022 - 01 - 01|一百|二百二十|
| 1|2021 - 12 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01|五十|二百四十|
| 1|2021 - 11 - 01 - 01|七十|一百九十五|
| 1|2021 - 10 - 01 - 01|一百二十|一百二十五|
| 1|2021 - 09 - 01 2021 - 09 - 01|五|五|
fiddle
该查询也将对您称为“Date”的YYYYMM字符串起作用。请参阅:https://dbfiddle.uk/xbxUsZA6

相关问题