我的目标是计算出有多少帐户在我的网站在特定的时间。我允许帐户在任何时候被取消,但如果他们被取消后的一个月,我看,然后我仍然希望他们出现,因为他们是活跃的快照时间。
我的 accounts
如下所示的表:
--------------------------------------------------
id | int
signUpDate | varchar
cancellationTriggeredDate | datetime (NULLABLE)
--------------------------------------------------
我写了一个select语句来实现这个目标,它看起来像:
SELECT
COUNT(*) AS January_2020
FROM
Accounts
WHERE
STR_TO_DATE(signUpDate, '%d/%m/%Y') <= STR_TO_DATE('31/01/2020', '%d/%m/%Y')
AND cancellationTriggeredDate <= '2020-01-31 00:00:00'
预期结果将是3,这是多少帐户,我在一月份,并没有被取消后,一月。实际结果为0。我相信这是因为不是我所有的帐户都有一个取消日期,但我不知道如何处理这个。
为了更容易获得帮助,我创建了一个包含示例数据和模式的sql fiddle。
http://sqlfiddle.com/#!9/64f3e3层
2条答案
按热度按时间798qvoo81#
您的日期比较必须与取消日期相符。
那你可以用
OR
处理NULL
:这是小提琴。请注意,上面给出了在每个2020-01-31 00:00:00(也就是在一天开始时)处于活动状态的用户。你可能有不同的意思:
客户活动时间正好是2020-01-31 00:00:00
客户活动时间正好是2020-02-01 00:00:00
2020-01-31全天活跃的客户
整个2020-01月的活跃客户
在2020-01月期间的任何时候都活跃的客户
所有这些使用基本相同的逻辑,只是通过调整具体的比较。
8i9zcol22#
替代解决方案-您可以使用
CASE WHEN
并初始化cancellationTriggeredDate
在这个领域进行比较之前,有一个假设的更高的日期(即本世纪末)WHERE
谓语。