gpt4 book ai didi

mysql - MySQL 中周期内的增量数

转载 作者:行者123 更新时间:2023-11-30 01:24:49 24 4
gpt4 key购买 nike

我认为这个问题很难解决。我的 DDBB 中有一张表,如下所示:

+----+--------+-------+
| ID | MONTH | VALUE |
+----+--------+-------+
| 1 | 1-2000 | 20.00 |
| 1 | 2-2000 | 21.00 |
| 1 | 3-2000 | 7.00 |
| 1 | 4-2000 | 8.00 |
+----+--------+-------+

具有以下定义:

ID      INTEGER(7) ZEROFILL NOT NULL
MONTH VARCHAR(7) NOT NULL
VALUE DOUBLE(20,2)

我想要实现的是检索一段时间内字段 {VALUE} 较之前的值增加的次数的方法。在上面的示例中,如果时间段从“1-2000”到“4-2000”,则 {VALUE} 增加了 2 倍:[20.00->21.00, 7.00->8.00]

最后,我希望得到以下输出:

+----+------------+
| ID | NUM_OF_INC |
+----+------------+
| 1 | 2 |
+----+------------+

我指出的主要问题是 {MONTH} 不是 DATE 类型字段(当然,它不可能是)。

有什么办法可以实现这一点吗?恐怕解决方案是获取所有值,然后从执行查询的引擎中进行一一比较。

最佳答案

由于您的日期格式和 MySQL 缺乏一次性转换它们的 CTE,查询变得相当冗长;这会搜索整个范围,但使用相同的模式添加范围检查相当容易;

SELECT a.id, COUNT(*) NUM_OF_INC
FROM Table1 a
JOIN Table1 b
ON a.id = b.id
AND a.value < b.value
AND STR_TO_DATE(CONCAT(a.`MONTH`, '-1'), '%c-%Y-%d')
< STR_TO_DATE(CONCAT(b.`MONTH`, '-1'), '%c-%Y-%d')
LEFT JOIN Table1 c
ON a.id = c.id
AND STR_TO_DATE(CONCAT(a.`MONTH`, '-1'), '%c-%Y-%d')
< STR_TO_DATE(CONCAT(c.`MONTH`, '-1'), '%c-%Y-%d')
AND STR_TO_DATE(CONCAT(c.`MONTH`, '-1'), '%c-%Y-%d')
< STR_TO_DATE(CONCAT(b.`MONTH`, '-1'), '%c-%Y-%d')
WHERE c.id IS NULL
GROUP BY a.id;

An SQLfiddle to test with .

遗憾的是,此查询肯定不会使用您在 MONTH 上拥有的任何索引。

关于mysql - MySQL 中周期内的增量数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18125574/

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