我有一个用户订阅特定服务的表格,按月计费。还有一个“暂停”表格-从“和”到“日期存储有关用户临时暂停订阅的信息。
有三种可能的情况:
- “从”和“到”日期都是过去的-用户在过去的一段时间内暂停了订阅,但现在订阅再次激活
- “from”是过去的,但“to”是未来的或为NULL -此时服务暂停(直到“to”日期或不确定)
- “from”和“to”是未来的(或“from”是未来的,“to”是空的)-用户请求未来的订阅暂停/取消,但目前服务仍然有效
对于给定的订阅,可能有多个条目处于“暂停”状态,有些可能已经完成(过去),有些“正在进行”。
现在我需要选择活动订阅。
我试着做一些事情,比如:
SELECT * FROM service
LEFT JOIN suspensions ON service.id = suspensions.service_id
WHERE
suspensions.id IS NULL
OR
( suspension_from < CURDATE() AND suspension_to < CURDATE() )
OR ( suspenstion_from > CURDATE() AND ( suspension_to > CURDATE() OR suspension_to IS NULL)) )
GROUP BY
service.customer_id
字符串
如果给定服务的“挂起”表中只有一个条目,则该方法有效。
但是,如果客户有多个暂停条目,其当前时刻的结果不同,例如从01-01-2021到31-12-2021和01-09-2023到31-08-2024,则WHERE子句将第一个视为“活动服务”(暂停在过去),第二个作为“目前不活动”(并省略了一个预期),并在结果中,我有该服务作为活动(因为第一个条目),而实际上它是不活动的。
如何做到这一点?以某种方式计数(或concat)“活动”结果和“非活动”结果,按customer_id分组,然后只过滤那些有0个非活动结果的结果?
1条答案
按热度按时间zyfwsgd61#
字符串