【问题标题】:MySQL : Count row where sum of left day is less than 30MySQL:计算左天总和小于30的行
【发布时间】:2013-02-05 11:31:17
【问题描述】:

我想计算表中订阅将在一个月(30 天)内到期的用户。这是我的代码:

user_db

id         name        exp_date
1          John        2013-03-01
2          Alice       2013-02-25
3          Ken         2013-01-10
4          Elise       2013-04-11
5          Bruce       2013-03-14

根据上面的数据库。应该有 3 个人的订阅即将到期 - John、Alice 和 Bruce。 我不希望 Ken 被计算在内,因为他不想订阅更多。

这是我的 MySQL 代码:

SELECT count(id) AS exp_pax, 
       datediff(exp_date,now()) AS day_left 
FROM labour_db 
WHERE day_left<=30

好吧,代码确实只选择了一天总和小于 30 的行,但不计算在内。所以请你建议我。

问候,

【问题讨论】:

  • 因为他不想订阅更多 -- 你怎么知道的?
  • @JW,如果他这样做的话。订阅日期不应该早于今天,不是吗?
  • 好的,请看下面我的回答。你需要检查exp_date

标签: mysql date count sum row


【解决方案1】:

如果要计算所有记录,其中 (1) 到期日期在现在 30 天内和 (2) 到期日期不在现在之前,请使用

SELECT count(*) AS exp_pax 
FROM   user_db 
WHERE exp_date<=timestampadd(day, 30, now())
       AND exp_date >= now();

【讨论】:

    【解决方案2】:

    如果是这种情况,那么您需要添加条件来检查 exp_date 是否小于今天。

    SELECT  COUNT(*) totalCount
    FROM    user_db 
    where   exp_date <= timestampadd(day, 30, now()) AND
            exp_date > NOW()
    

    【讨论】:

    • JW,你的代码也可以工作,绝对和 D Mac 一样出色。谢谢。
    【解决方案3】:

    删除group by id 以获取您的计数。

    Count 会像您期望的那样汇总行,但是当与group by 子句结合使用时,将对每个“组”进行计数。您可以有用地使用它,例如,按到期日期分组。

    【讨论】:

    • Joseph,是的,它确实很重要,但也包括过期日期,我不希望它们被计算在内。
    • @Wilf,你必须告诉我们如何确定 Ken 不应该被计算在内。然后我们可以为您翻译成 SQL。
    • @DMc,只有从今天开始的 datediff 小于 30 且不是负数的 exp_date。
    猜你喜欢
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2012-12-14
    • 2020-06-29
    • 1970-01-01
    • 2010-11-07
    相关资源
    最近更新 更多