【问题标题】:SQL - Conditions between 2 datesSQL - 两个日期之间的条件
【发布时间】:2021-08-18 12:31:33
【问题描述】:

我有一个包含 3 列的表:user_idstart_datecancellation_date

我想获得 4 列: DateNumber of Active UsersNumber of Users Who CanceledCancellation Rate

关于如何编写查询的任何想法?

提前致谢!

【问题讨论】:

标签: mysql sql conditional-statements case active-users


【解决方案1】:

这是衡量新用户、取消用户、活跃用户的一种方法:

SELECT  calendar_date,
        (SELECT COUNT(*) FROM users AS usr WHERE cal.calendar_date BETWEEN usr.start_date AND IFNULL(usr.cancellation_date, '3000-01-01')) AS active_users,
        (SELECT COUNT(*) FROM users AS usr WHERE usr.start_date = cal.calendar_date) AS new_users,
        (SELECT COUNT(*) FROM users AS usr WHERE usr.cancellation_date = cal.calendar_date) AS users_cancelled
FROM    my_calendar AS  cal

(假设您有包含所有日期的表“my_calendar”)

【讨论】:

  • 太棒了!非常感谢 Yair!
【解决方案2】:

如果我们定义活跃用户为cancellation_date为null,查询会是这样的;

SELECT 
( SELECT CURDATE() ) AS `DATE`,
( SELECT COUNT(*) FROM users WHERE cancellation_date IS NULL) AS `Number of active users`,
( SELECT COUNT(*) FROM users WHERE cancellation_date IS NOT NULL) AS `number of users who cancelled`,
( SELECT `number of users who cancelled` / (`Number of active users` + `number of users who cancelled`)) AS `cancellation rate`

在 MySQL 8 上测试,https://www.db-fiddle.com/f/6QPLn2C79rnzrfN71i1GMV/0

【讨论】:

  • 您好,谢谢!在这个查询中,我只会得到当前日期。关于如何获取所有日期列表的任何想法? (假设从 2020 年 1 月 1 日开始)
猜你喜欢
  • 2019-12-02
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2015-06-21
  • 2021-11-28
  • 1970-01-01
相关资源
最近更新 更多