mysql 根据数据从一列中获取滚动总和,从另一列中获取最大值

ep6jt1vc  于 2023-03-28  发布在  Mysql
关注(0)|答案(1)|浏览(134)
产品展示动物日期数量(销售/接收)移动价格
QQ大鼠2022年12月28日1一百
QQ大鼠2022年12月31日-1人二百
血脑屏障大鼠2022年11月23日五十
血脑屏障大鼠二零二二年十一月二十八日一百
血脑屏障大鼠2022年11月30日八百
血脑屏障禁止酷刑公约2022年12月27日一百
血脑屏障禁止酷刑公约2022年12月28日1九十

所以只有一张table
| 产品展示|动物|累计数量|现行价格|
| --------------|--------------|--------------|--------------|
| QQ|大鼠|1|一百|
| 血脑屏障|大鼠|十一|一百|
| 血脑屏障|禁止酷刑公约|三|九十|
我将手动输入有效日期12/28/2022,我应该得到上述值。
| 产品展示|动物|累计数量|现行价格|
| --------------|--------------|--------------|--------------|
| 血脑屏障|大鼠|十一|一百|
| | | | |
我将手动输入有效日期12/15/2022,我应该得到上述值。
基本上,我想按列存储和动物分组,并获得该日期的累计数量和该日期的有效价格。

kgsdhlau

kgsdhlau1#

尝试this

CREATE TABLE animal_transactions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    store VARCHAR(10) NOT NULL,
    animal VARCHAR(10) NOT NULL,
    date DATE NOT NULL,
    quantity INT NOT NULL,
    moving_price DECIMAL(10, 2) NOT NULL
);

INSERT INTO animal_transactions (store, animal, date, quantity, moving_price)
VALUES
    ('QQQ', 'RAT', '2022-12-28', 1, 100),
    ('QQQ', 'RAT', '2022-12-31', -1, 200),
    ('BBB', 'RAT', '2022-11-23', 3, 50),
    ('BBB', 'RAT', '2022-11-28', 5, 100),
    ('BBB', 'RAT', '2022-11-30', 3, 800),
    ('BBB', 'CAT', '2022-12-27', 2, 100),
    ('BBB', 'CAT', '2022-12-28', 1, 90);

WITH DataSource AS
(
  SELECT *
        ,SUM(quantity) OVER (PARTITION BY store, animal ORDER BY date) culm_quantity
        ,ROW_NUMBER() OVER (PARTITION BY store, animal ORDER BY date DESC) row_id
  FROM animal_transactions
 
)
SELECT *
FROM DataSource
WHERE row_id = 1
ORDER BY store, animal, date

这个想法是按日期对每个商店和动物的数量进行求和。同时,将记录标记为最早的记录。
为了按日期过滤数据,请在CTE中添加WHERE子句。

相关问题