开发者社区> 问答> 正文

如何将while循环集成到SQL查询中?(重复最后一个结果)

如何将while循环集成到SQL查询中?(重复最后一个结果)

展开
收起
贺贺_ 2019-12-02 23:13:33 451 0
1 条回答
写回答
取消 提交回答
  • 实际上,您不需要循环来迭代结果集,因为 SELECT 语句中的函数在每个结果记录上执行。 您可以使用MySQL 文档页中描述的控制流函数来处理结果中的相关数据。在此堆栈溢出问题"SELECT"语句中,有一些示例 " IF " - 根据列值选择输出值,或者您也可以在 MySQL 中使用不同数据组合语句的组合 我确实已经成功地根据您通过使用 和子查询的组合提供的映像获得了预期输出。

    UNIONJOIN
    
    

    代码

    SELECT *, mqa.Current_Status as Result 
      FROM MyQuery mqa
      WHERE 
        mqa.Block = 1 
        AND mqa.Status_History IS NULL
      UNION
      SELECT mqb.*, mqb.Status_History as Result 
      FROM MyQuery mqb
      WHERE 
        Status_History IS NOT NULL
      UNION
      SELECT mqc.ID,
           mqc.Period,
           mqc.Current_Status,
           mqc.Status_History,
           mqc.Block,
           (SELECT TOP 1 mqd.Status_History FROM MyQuery mqd
                        WHERE mqd.ID = mqc.ID
                            AND mqd.Block < mqc.Block
                            AND mqd.Status_History IS NOT NULL
                         ORDER BY Block DESC)
            FROM MyQuery mqc
                      WHERE 
                        mqc.Status_History IS NULL
                        AND mqc.Block <> 1
    
    

    结果

    |     ID | Period | Current_Status | Status_History | Block | Result |
    |--------|--------|----------------|----------------|-------|--------|
    | 012014 | 201710 |              5 |         (null) |     6 |      7 |
    | 012014 | 201711 |              5 |              7 |     5 |      7 |
    | 012014 | 201712 |              5 |         (null) |     4 |      3 |
    | 012014 | 201810 |              5 |         (null) |     3 |      3 |
    | 012014 | 201811 |              5 |              3 |     2 |      3 |
    | 012014 | 201812 |              5 |         (null) |     1 |      5 |
    | 012015 | 201710 |              2 |         (null) |     6 |     10 |
    | 012015 | 201711 |              2 |         (null) |     5 |     10 |
    | 012015 | 201712 |              2 |         (null) |     4 |     10 |
    | 012015 | 201810 |              2 |         (null) |     3 |     10 |
    | 012015 | 201811 |              2 |         (null) |     2 |     10 |
    | 012015 | 201812 |              2 |             10 |     1 |     10 |
    
    

    您可以在此SQLFiddle中播放上述代码

    2019-12-02 23:14:36
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载