Sql 根据3个变量计算两个变量之间的天数&;语法错误

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/

我希望您能就以下几个问题提供一些见解:

问题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-这是正确的
这似乎符合您的预期结果:

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
函数有windowing
OVER
子句,但
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