根据 3 个变量和语法错误计算间隔天数
Calculate Days Between Based on 3 Variables & Syntax Error
我希望你能就几个问题提供一些见解:
问题 1 - 我在 Teradata 中收到以下错误消息 运行:
“语法错误,在整数和 'then' 关键字之间需要类似 ')' 的内容。”
我的数据中有一些重复的记录,我想说的是,如果满足所有条件,则年龄天数等于 1,否则,计算天数。
问题 2 - date_diff 计算不正确(参见 table)
Date_Phase_Modified
Historical_Phases
Date_Diff
1/4/2021 20:33
Closed
shows 0 - want to see 1
1/4/2021 20:32
Implement
63 - this is correct
12/1/2020 18:34
Implement
shows 29 - want to see 0
11/2/2020 18:20
Implement
0 - this is correct
10/21/2020 20:07
Early Stage
shows 0 - want to see 1
10/21/2020 20:06
Early Stage
0 - this is correct
10/21/2020 19:59
Early Stage
0 - this is correct
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
我希望你能就几个问题提供一些见解:
问题 1 - 我在 Teradata 中收到以下错误消息 运行: “语法错误,在整数和 'then' 关键字之间需要类似 ')' 的内容。”
我的数据中有一些重复的记录,我想说的是,如果满足所有条件,则年龄天数等于 1,否则,计算天数。
问题 2 - date_diff 计算不正确(参见 table)
Date_Phase_Modified | Historical_Phases | Date_Diff |
---|---|---|
1/4/2021 20:33 | Closed | shows 0 - want to see 1 |
1/4/2021 20:32 | Implement | 63 - this is correct |
12/1/2020 18:34 | Implement | shows 29 - want to see 0 |
11/2/2020 18:20 | Implement | 0 - this is correct |
10/21/2020 20:07 | Early Stage | shows 0 - want to see 1 |
10/21/2020 20:06 | Early Stage | 0 - this is correct |
10/21/2020 19:59 | Early Stage | 0 - this is correct |
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