【问题标题】:Calculate a subscription end date from the set of date, interval, and period using mysql query?使用 mysql 查询从日期、间隔和期间的集合中计算订阅结束日期?
【发布时间】:2020-05-08 15:00:46
【问题描述】:

我希望根据日期、间隔号和期间(日、周、月和年)的集合来计算到期日。

这是我的数据

预计到期日为2020-09-24,基于以下计算

((2020-01-22)+8 months)+((2020-01-22)+2 days) = 2020-09-24

我尝试使用以下选择查询,但它没有显示预期的输出,

SELECT CASE t.cycle_period
   WHEN "day" THEN DATE_ADD(t.createdTime, INTERVAL t.cycle_number DAY)
   WHEN "week" THEN DATE_ADD(t.createdTime, INTERVAL t.cycle_number WEEK)
   WHEN "month" THEN DATE_ADD(t.createdTime, INTERVAL t.cycle_number MONTH)
   WHEN "year" THEN DATE_ADD(t.createdTime, INTERVAL t.cycle_number YEAR)
   END
   AS expiry, t.cycle_period FROM (
   SELECT DATE_FORMAT(createdTime,'%Y-%m-%d') AS createdTime,SUM(cycle_number) AS cycle_number, 
   cycle_period FROM subscriptions 
   WHERE STATUS='COMPLETED' AND user_id='2' 
   GROUP BY DATE_FORMAT(createdTime,'%Y-%m-%d'),cycle_period
   ORDER BY createdTime DESC) t

请帮忙!

【问题讨论】:

  • 考虑处理应用代码中数据显示的问题

标签: mysql sql


【解决方案1】:
SELECT createdTime, 
       createdTime
     + INTERVAL COALESCE(SUM(CASE WHEN cycle_period = 'YEAR' THEN cycle_number END), 0) YEAR
     + INTERVAL COALESCE(SUM(CASE WHEN cycle_period = 'MONTH' THEN cycle_number END), 0) MONTH
     + INTERVAL COALESCE(SUM(CASE WHEN cycle_period = 'WEEK' THEN cycle_number END), 0) WEEK
     + INTERVAL COALESCE(SUM(CASE WHEN cycle_period = 'DAY' THEN cycle_number END), 0) DAY
     AS expiry
FROM subscriptions 
GROUP BY createdTime;

fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多