sql - 根据 3 个变量和语法错误计算天数
问题描述
我希望你能就几个问题提供一些见解:
ISSUE 1 - 我收到以下在 Teradata 中运行的错误消息:“语法错误,在整数和 'then' 关键字之间应出现类似 ')' 的内容。”
我的数据中有一些重复的记录,我想说的是,如果所有条件都满足,那么 Age in Days 等于 1,否则,计算天数。
ISSUE 2 - date_diff 计算不正确(见表格)
Date_Phase_Modified | 历史阶段 | Date_Diff |
---|---|---|
2021 年 1 月 4 日 20:33 | 关闭 | 显示 0 - 想看 1 |
2021 年 1 月 4 日 20:32 | 实施 | 63 - 这是正确的 |
2020 年 12 月 1 日 18:34 | 实施 | 显示 29 - 想看 0 |
2020 年 11 月 2 日 18:20 | 实施 | 0 - 这是正确的 |
2020 年 10 月 21 日 20:07 | 早期 | 显示 0 - 想看 1 |
2020 年 10 月 21 日 20:06 | 早期 | 0 - 这是正确的 |
2020 年 10 月 21 日 19:59 | 早期 | 0 - 这是正确的 |
CASE when((
MAX(cast(Date_Phase_Modified as date format 'MM/DD/YYYY')) - MIN(cast(Date_Phase_Modified as date format 'MM/DD/YYYY'))
over (partition by F.oprty_key_nbr, Historical_Phases order by Historical_Phases, Date_Phase_Modified asc) Day(4)) = 0 then 1 else
MAX(cast(Date_Phase_Modified as date format 'MM/DD/YYYY')) - MIN(cast(Date_Phase_Modified as date format 'MM/DD/YYYY'))
over (partition by F.oprty_key_nbr, Historical_Phases order by Historical_Phases, Date_Phase_Modified asc) Day(4))
end as Age_In_Phase,
解决方案
这似乎符合您的预期结果:
CASE
WHEN Date_Phase_Modified = -- for latest row per phase
Max(Date_Phase_Modified) Over (PARTITION BY F.oprty_key_nbr, Historical_Phases )
THEN -- return duration of phase, but at least 1 day
Greatest( Cast(Max(Date_Phase_Modified) Over (PARTITION BY F.oprty_key_nbr, Historical_Phases ) AS DATE)
-Cast(Min(Date_Phase_Modified) Over (PARTITION BY F.oprty_key_nbr, Historical_Phases ) AS DATE)
, 1)
ELSE 0
END AS Age_In_Phase
推荐阅读
- android - 在 Android 上将图像与视频流合并
- php - PHP插入过滤器并将其打印在图像上
- database - 在 Firebase 中创建用户组
- sql - 使用嵌套在内部的多个选择查询更新查询
- javascript - Bootstrap 4 手风琴无法在移动设备上打开
- ios - 依赖于 pod 的框架需要什么?
- oracle - 具有输入和输出参数错误 PLS-00103 的函数
- sql - In Statement 只抓取第一个结果
- javascript - 按住浏览器关闭或标签关闭操作以显示自定义导航弹出窗口
- node.js - 使用 http-proxy-middleware 记录请求/响应主体