首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SQL中内置产品过期时间?

如何在SQL中内置产品过期时间?
EN

Stack Overflow用户
提问于 2021-04-08 10:53:01
回答 1查看 32关注 0票数 0

我有一个表,如下所示,从中我想得到总剂量的剩余天数:

代码语言:javascript
运行
复制
USER|PURCHASE_DATE|DOSES
1111|2017-07-27|15
2222|2020-07-17|3
3333|2021-02-01|5

如果剂量没有过期,并且每个剂量都可以使用90天,那么我使用的SQL是:

代码语言:javascript
运行
复制
SUM(DOSES)*90-DATEDIFF(DAY,MIN(DATE),GETDATE())
代码语言:javascript
运行
复制
USER|DAYS_REMAINING
1111|0
2222|6
3333|385

但是,如果我想强制每个剂量在一年内到期,该怎么办?如何修改我的SQL以获得以下所需的答案:

代码语言:javascript
运行
复制
USER|DAYS_REMAINING
1111|-985
2222|6
3333|300

它可能涉及到剂量过期时间和持续时间之间的最小值,但我不知道如何在过期逻辑中进行聚合。

EN

Stack Overflow用户

回答已采纳

发布于 2021-04-08 11:34:24

MIN是您希望LEAST在两个值之间选择的聚合函数:

代码语言:javascript
运行
复制
WITH data(user,purchase_date, doses) AS (
    SELECT * FROM VALUES
  (1111,'2017-07-27',15),
  (2222,'2020-07-17',3),
  (3333,'2021-02-01',5)
)
SELECT 
    d.*,
    d.doses * 90 AS doses_duration,
    365::number AS year_duration,
    least(doses_duration, year_duration) as max_duration,
    DATEADD('day', max_duration, d.purchase_date)::date as last_dose_day,
    DATEDIFF('day', current_date, last_dose_day) as day_remaining
FROM data AS d
ORDER BY 1;

提供:

代码语言:javascript
运行
复制
USER  PURCHASE_DATE DOSES  DOSES_DURATION YEAR_DURATION MAX_DURATION LAST_DOSE_DAY  DAY_REMAINING
1111  2017-07-27    15     1350           365           365          2018-07-27   -986
2222  2020-07-17    3      270            365           270          2021-04-13    5
3333  2021-02-01    5      450            365           365          2022-02-01    299

所有这些都可以通过date_diff上的一个小修复程序整合在一起,例如:

代码语言:javascript
运行
复制
WITH data(user,purchase_date, doses) AS (
    SELECT * FROM VALUES
  (1111,'2017-07-27',15),
  (2222,'2020-07-17',3),
  (3333,'2021-02-01',5)
)
SELECT 
    d.user,
    DATEDIFF('day', current_date, DATEADD('day', least(d.doses * 90, 365::number), d.purchase_date)::date)+1 as day_remaining
FROM data AS d
ORDER BY 1;

给予:

代码语言:javascript
运行
复制
USER    DAY_REMAINING
1111    -985
2222    6
3333    300
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66996724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档