我有一个数据集,其中的 ID 具有每个策略的多个日期,但我需要添加一个自定义列,其中包含每个 ID 的最大日期。这样我就可以识别 ID 是否是新的,因为交易日期将是前一天。
我不想进行“groupby”,我希望将其添加到与另一列相同的表中。
例如:
策略 | 交易日期 |
---|---|
策略#1 | 2023 年 11 月 2 日 |
策略#1 | 2023 年 11 月 3 日 |
将添加自定义列,如下所示:
策略 | 交易日期 | 最大交易日期 |
---|---|---|
策略#1 | 2023 年 11 月 2 日 | 2023 年 11 月 3 日 |
策略#1 | 2023 年 11 月 3 日 | 2023 年 11 月 3 日 |
您实际上可以
INNER JOIN
使用虚拟表进行最大日期计算。
create table STRATEGY (
`Strategy` varchar(255),
`Trade Date` date
);
INSERT INTO STRATEGY (STRATEGY, `Trade Date`) VALUES
('Strategy #1', '2023-11-2'),
('Strategy #1', '2023-11-1'),
('Strategy #2', '2023-11-4'),
('Strategy #2', '2023-11-3');
ALTER TABLE STRATEGY ADD COLUMN MaxDate date;
UPDATE STRATEGY A INNER JOIN (SELECT Strategy, MAX(`Trade Date`) as MaxDate from STRATEGY GROUP BY Strategy) B
ON A.Strategy = B.Strategy
SET A.MaxDate = B.MaxDate;
SELECT * FROM STRATEGY;
决赛桌:
策略 | 交易日期 | 最大日期 |
---|---|---|
策略#1 | 2023-11-02 | 2023-11-02 |
策略#1 | 2023-11-01 | 2023-11-02 |
策略#2 | 2023-11-04 | 2023-11-04 |
策略#2 | 2023-11-03 | 2023-11-04 |