Sql 根据3个变量计算两个变量之间的天数&;语法错误
我希望您能就以下几个问题提供一些见解: 问题1-我在Teradata中运行时收到以下错误消息: 语法错误,整数和'then'关键字之间应为''' 我的数据中有一些重复的记录,我想说的是,如果所有条件都满足,那么以天为单位的年龄等于1,否则,计算天数 问题2-日期差异计算不正确(见表) 日期\阶段\修改 历史分期 日期差异 1/4/2021 20:33 关闭 显示0-要查看1吗 1/4/2021 20:32 实施 63-这是正确的 12/1/2020 18:34 实施 显示29-要查看0吗 11/2/2020 18:20 实施 0-这是正确的 10/21/2020 20:07 早期 显示0-要查看1吗 10/21/2020 20:06 早期 0-这是正确的 10/21/2020 19:59 早期 0-这是正确的Sql 根据3个变量计算两个变量之间的天数&;语法错误,sql,syntax,teradata,Sql,Syntax,Teradata,我希望您能就以下几个问题提供一些见解: 问题1-我在Teradata中运行时收到以下错误消息: 语法错误,整数和'then'关键字之间应为''' 我的数据中有一些重复的记录,我想说的是,如果所有条件都满足,那么以天为单位的年龄等于1,否则,计算天数 问题2-日期差异计算不正确(见表) 日期\阶段\修改 历史分期 日期差异 1/4/2021 20:33 关闭 显示0-要查看1吗 1/4/2021 20:32 实施 63-这是正确的 12/1/2020 18:34 实施 显示29-要查看0吗 11/
这似乎符合您的预期结果:
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
请参阅混合聚合和窗口聚合,代码段无效(检查括号),不需要格式(假设修改的日期为aTIMESTAMP),并且不需要
第(4)天。除此之外,我不明白您试图计算的内容。您的MIN
函数有windowingOVER
子句,但MAX
没有。另外,ORDER BY
对于MIN
/MAX
窗口不需要,ORDER BY
字段中的分区也不需要重复,即使是像LAG
@dnoeth这样的情况,谢谢您的反馈。正如您所看到的,我确实是SQL的新手。我试图计算这项交易在销售周期的每个阶段有多少天。因此,它处于早期阶段,持续1天。然后进入实施阶段63天。终于结束了为期1天的阶段。@Fred感谢您的专业知识!我会按照你的建议修改!正如你可能猜到的那样,我是SQL的真正新手。非常感谢!我非常接近预期的结果。除2条线路外,所有线路均可用|12/21/2020年10/21/2020年1 | 10/10/21/2020年10/10/12/21/2020年10/12/10/21/2020年1