gpt4 book ai didi

mySQL 数据范围为单个日期的 0/1 标志

转载 作者:行者123 更新时间:2023-11-29 00:10:34 26 4
gpt4 key购买 nike

我有两个表:

ID   | date       | flag
1 | 2014-08-20 | 0
1 | 2014-08-21 | 0
1 | 2014-08-23 | 0
1 | 2014-08-25 | 0
1 | 2014-08-28 | 0
2 | 2014-08-24 | 0

ID   | date_from  | date_to
1 | 2014-08-20 | 2014-08-22
1 | 2014-08-27 | 2014-08-28
2 | 2014-08-27 | 2014-08-28

如果表 t 中的日期在表 u 中的日期范围内,我想将“1”放入标志列。当然是针对每个单独的 ID。

所以我想在这种情况下:

ID   | date       | flag
1 | 2014-08-20 | 1
1 | 2014-08-21 | 1
1 | 2014-08-23 | 0
1 | 2014-08-25 | 0
1 | 2014-08-28 | 1
2 | 2014-08-24 | 0

我尝试了所有我能找到的例子,但我能设法工作的唯一结果是如果在表 u 的任何范围内找到表 t 的日期而不是表 u 的确切日期,则添加“1”所需的 ID。所以 flag 列填充了 '1'。

最佳答案

用左连接(左表中的所有行)连接它,然后检查连接表中的条目是否存在。如果是,返回 1,否则返回 0。

select
t.*,
if(u.id is null, 0, 1) as my_flag
from
t
left join u on t.date between u.date_from and u.date_to

你也可以把它变成一个更新语句:

update
t
left join u on t.date between u.date_from and u.date_to
set t.flag = if(u.id is null, 0, 1);

关于mySQL 数据范围为单个日期的 0/1 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25305174/

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