首页 > 解决方案 > 根据另一列的过滤器更新 SQL 列?

问题描述

我被困在一个 SQL 查询中。我想使用 sql 查询更新列状态。确切的要求是我有一个如下的 SQL 表。

_____________________________________________
start_date          end_date        status
---------------------------------------------
2014/01/03      |   2018/01/03  |   FAILED
2016/12/15      |   2017/01/03  |   SUCCESS
2014/01/03      |   2010/01/13  |   FAILED
2017/10/23      |   2017/01/03  |   FAILED
2014/01/03      |   2011/01/03  |   FAILED
2017/11/13      |   2017/01/03  |   SUCCESS
---------------------------------------------

在上表中,我有 start_date、end_date 和 status。现在我想将状态从“FAILED”更新为“SUSPEND”,其中 end_date 是所有日期中最旧的一个,start_date 相同但 end_date 不同。(这里只会更新一行,如下表所示)

我正在尝试构建查询,但无法获取所需的结果。应用正确的查询后,表应如下所示。


start_date          end_date        status
---------------------------------------------
2014/01/03      |   2018/01/03  |   FAILED
2016/12/15      |   2017/01/03  |   SUCCESS
2014/01/03      |   2010/01/13  |   SUSPEND
2017/10/23      |   2017/01/03  |   FAILED
2014/01/03      |   2011/01/03  |   FAILED
2017/11/13      |   2017/01/03  |   SUCCESS
---------------------------------------------

任何人都可以在这方面帮助我。提前致谢。

标签: mysqlsqloracle

解决方案


您可以使用 where 子句进行更新。我不明白你的意思,并且 start_date 是相同的,但 end_date 是不同的,所以我没有使用它。

UPDATE table1
SET status='SUSPEND'
WHERE status='FAILED' and end_date<start_date

推荐阅读