MySQL对数据表的循环操作和时间段相关操作如何实现


SELECT dt1, dt2 FROM(
SELECT
@dt1 as dt1, 
@dt1 := @dt1 + INTERVAL 6 MONTH, 
CASE 
    WHEN RIGHT(LEFT(@dt1,7),2) > "8" THEN
        CAST(CONCAT_WS('-',LEFT(@dt1,4),LEFT(@dt1,4)+1) AS CHAR(10000) CHARACTER SET utf8)
    WHEN RIGHT(LEFT(@dt1,7),2) <= "8" THEN
        CAST(CONCAT_WS('-',LEFT(@dt1,4)-1,LEFT(@dt1,4)) AS CHAR(10000) CHARACTER SET utf8)
END as xn,
CASE 
    WHEN RIGHT(LEFT(@dt1,7),2) <= 8 THEN
        "1"
    WHEN RIGHT(LEFT(@dt1,7),2) > 8 THEN    
        "2"
END as xq
CASE WHEN @dt1 <= @dt2 THEN @dt ELSE  @dt2 END as dt2
FROM( SELECT @dt1:=CAST(gzrq as date), @dt2:=CAST( DATE_ADD(jcrq, INTERVAL 6 MONTH) as date) FROM T_ZDGZ ORDER BY gzrq ASC ) _x,
(SELECT @dt1:=NULL, @dt2:=NULL) vars
WHERE @dt1 <= @dt2
) A

img

这段sql语句只会对T_ZDGZ 数据表的最后一条记录进行计算,应该如何做才能实现对T_ZDGZ 数据表的每一条记录都进行相关计算,各位学霸们有谁知道吗


SELECT dt1, dt2 FROM(
    SELECT
    @dt1 as dt1,
    @dt1 := @dt1 + INTERVAL 6 MONTH,
    CASE
        WHEN RIGHT(LEFT(@dt1,7),2) > "8" THEN
            CAST(CONCAT_WS('-',LEFT(@dt1,4),LEFT(@dt1,4)+1) AS CHAR(10000) CHARACTER SET utf8)
        WHEN RIGHT(LEFT(@dt1,7),2) <= "8" THEN
            CAST(CONCAT_WS('-',LEFT(@dt1,4)-1,LEFT(@dt1,4)) AS CHAR(10000) CHARACTER SET utf8)
    END as xn,
    CASE
        WHEN RIGHT(LEFT(@dt1,7),2) <= 8 THEN
            "1"
        WHEN RIGHT(LEFT(@dt1,7),2) > 8 THEN
            "2"
    END as xq,
    CASE WHEN @dt1 <= @dt2 THEN @dt1 ELSE  @dt2 END as dt2
    FROM(
        SELECT
        @dt1:=CAST(gzrq as date),
        @dt2:=CAST( DATE_ADD(jcrq, INTERVAL 6 MONTH) as date)
        FROM T_ZDGZ
        ORDER BY gzrq ASC
    ) _x,
    (SELECT @dt1:=NULL, @dt2:=NULL) vars
    WHERE @dt1 <= @dt2
) A

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    抱歉,需要更详细的问题描述和SQL语句,才能给出具体的解决方案。请提供以下信息:

    1. 数据表T_ZDGZ的结构和数据;
    2. 您想实现的时间段相关计算是什么;
    3. 您现在已尝试的SQL语句是什么;
    4. MySQL版本和使用的开发工具。

    谢谢!


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^