gpt4 book ai didi

mysql按日期和用户ID选择行对

转载 作者:行者123 更新时间:2023-11-30 23:25:19 25 4
gpt4 key购买 nike

我正在寻找一种方法来更改行对的两个值的列值。找到正确的行对是通过分组完成的。问题是因为分组只返回一个 row_id。

案例:一个培训师一天可以有两个项目。
如果客户计划培训事件,培训师会拜访该客户,这样他就无法在第二节课中拜访其他客户。
计划培训事件的客户获得了位置值为“Null”或带有其客户 ID 的事件。
这样,一个客户可以在一天内安排多个 session ,而当第一个事件在另一个客户处时,另一个客户不能申请第二个事件。
事件的声明分两步进行:首先将状态更改为“待处理”并且事件获得过期日期,在下一步中将状态更改为“已接收”。当待定事件到期时,状态将更改回“打开”。

问题:位置不能总是被清除。如果其他事件已发生或未决,则无法清除该位置。当两个事件都“打开”时,必须清除两个事件的位置。

设计:事件表包含一个列“位置”。如果计划举办事件,则将这一天的所有“位置”字段设置为客户 ID;

eventid - orderid - eventdatetime - expiredate - status - location
2 - NULL - 12 december 2012 9:00 - NULL - open - 45
3 - 54 - 12 december 2012 13:00 - 23nov2012 - pending - 45
4 - 74 - 13 december 2012 9:00 - 23nov2012 - pending - 45
5 - 23 - 13 december 2012 13:00 - NULL - taken - 45
6 - NULL - 14 december 2012 9:00 - NULL - open - NULL
7 - NULL - 14 december 2012 13:00 - NULL - open - NULL

如果 eventid 3 过期,状态必须设置为“打开”并且 eventid 2 和 3 的位置必须设置为 NULL如果 eventid 4 过期,则必须将状态设置为“打开但 eventid 4 和 5 的位置必须保持不变”

我在两个查询中这样做:

查询一:

update trainingevents
set orderid = null
set expiredate = null
set status = "open"
where expiredate > now()

查询二:

update trainingevents
set location = null
set expiredate
where eventid in (
select eventid from trainingevents
where count(orderid)=0 and count(location)>0
group by date_format(eventdatetime, only date)
)

我使用分组来查找对,但分组只返回一个 eventid。

获取两个 eventids 有什么建议吗?

最佳答案

如果您想更新两行,则无需分组(假设我对您的理解正确)。

你可以这样重写查询二:

update trainingevents
set location = null
set expiredate = null
where eventid in (
select eventid from trainingevents
where orderid is null and location is not null
)

或者,更简单地说

update trainingevents
set
location = null,
expiredate = null
where orderid is null and location is not null

关于mysql按日期和用户ID选择行对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13635962/

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