gpt4 book ai didi

mysql - 创建从 from-to-entries 的时间序列

转载 作者:可可西里 更新时间:2023-11-01 07:38:27 25 4
gpt4 key购买 nike

我有一些周期数据,如下所示:

PName        DtFrom       DtTo          Amount
Period_1 2018-01-01 2018-01-10 100
Period_2 2018-01-03 2018-01-08 10
Period_3 2018-01-05 2018-01-12 1

我想获得以下时间序列,添加每个期间日期范围内的金额:

2018-01-01   100
2018-01-02 100
2018-01-03 110
2018-01-04 110
2018-01-05 111
2018-01-06 111
2018-01-07 111
2018-01-08 111
2018-01-09 101
2018-01-10 101
2018-01-11 1
2018-01-12 1

我使用 DATE_ADD、DATEDIFF 等进行了大量研究,还使用了其他 StackOverflow 问题。但没有成功。有什么想法吗?

最佳答案

虽然我真的提倡在应用程序代码中处理这个问题,但这里有一个使用小整数实用程序表的解决方案。您可以改用日历表,或者即时构建一个整数序列...

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(Perid SERIAL PRIMARY KEY
,DtFrom DATE NOT NULL
,DtTo DATE NOT NULL
,Amount INT NOT NULL
);

INSERT INTO my_table VALUES
(1,'2018-01-01','2018-01-10',100),
(2,'2018-01-03','2018-01-08',10),
(3,'2018-01-05','2018-01-12',1);

SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+

SELECT dtfrom + INTERVAL y.i DAY dt
, SUM(x.amount) total
FROM my_table x
JOIN ints y
WHERE dtfrom + INTERVAL y.i DAY <= dtto
GROUP
BY dt;
+------------+-------+
| dt | total |
+------------+-------+
| 2018-01-01 | 100 |
| 2018-01-02 | 100 |
| 2018-01-03 | 110 |
| 2018-01-04 | 110 |
| 2018-01-05 | 111 |
| 2018-01-06 | 111 |
| 2018-01-07 | 111 |
| 2018-01-08 | 111 |
| 2018-01-09 | 101 |
| 2018-01-10 | 101 |
| 2018-01-11 | 1 |
| 2018-01-12 | 1 |
+------------+-------+

如果 dtfrom 和 dtto 之间的间隔可以超过 10 天,您可以沿着这些思路扩展解决方案...

SELECT dtfrom + INTERVAL i2.i*10 + i1.i DAY dt
, SUM(x.amount) total
FROM my_table x
JOIN ints i1
JOIN ints i2
WHERE dtfrom + INTERVAL i2.i*10 + i1.i DAY <= dtto
GROUP
BY dt;

关于mysql - 创建从 from-to-entries 的时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49130325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com