我陷入了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
---------------------------------------------
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
---------------------------------------------
谁能帮我一下吗。提前谢谢。
3条答案
按热度按时间wwtsj6pe1#
在派生表中,获取
end_date
对于一群start_date
.加入你的主表基于
start_date
以及min_end_date
.更新
status
相应地。在mysql(db fiddle)中尝试以下操作:
qgelzfjb2#
可以使用where子句来更新。我不明白你的意思,开始日期是一样的,但结束日期是不同的,所以我没有用它。
ycggw6v23#
马杜尔所说的任何逻辑都是正确的,除了一个功能性错误。既然你要的是最老的。。我们应该使用min而不是max进行查询,如下所示