嗨,我对teradata相对较新。我有一个有2个日期的行。我需要在这些拖曳日期之间获得最小值并将其显示为第三次约会。日期为YYYYMMDD格式。这是所有的可能性
示例表
COL1 - DATE1 - DATE2
- 123--20140802--20140619
- 124--20140802--0
- 124--0--20140802
- 125--0--0
我需要我的结果集
COL1 - DATE1 - DATE2 - MIN_DATE
- 123--20140802--20140619--6 /二千零十四分之十九
- 124--20140802--0--8 / 2/2014(非零将为min_date)
- 124--0--20140802--8 / 2/2014(非零将为min_date)
- 125--0--0 - ?
这就是我能提出来的
select col1, date1, date2,
case
when date1 <> 0 and date2 = 0 then cast((date1 - 19000000) as date)
when date1 = 0 and date2 <> 0 then cast((date2 - 19000000) as date)
when date1 = 0 and date2 = 0 then cast(null as date)
when date1 > date2
then
cast((date2 - 19000000) as date)
else
cast((date1 - 19000000) as date)
end as min_date
这确实给了我结果,但查询很慢。我想知道是否有更好更有效的方法,请告诉我。我还需要以另一种格式显示min_date,如下所示
COL1 - DATE1 - DATE2 - MIN_DATE - MIN_MONTH
123--20140802--20140619--6 / 19/2014 - 2014年6月 124--20140802--0--8 / 2/2014 - 2014年8月 124--0--20140802--8 / 2/2014 - 2014年8月 125--0--0 - 空 - 空
对于min_month,我知道如果我知道要使用哪个日期,我可以使用它
cast(cast((date2 or date2 - 19000000) as date format 'MMM') as Char(3))
|| ', ' ||
cast(cast((date2 or date2 - 19000000) as date format 'YYYY') as Char(4))
非常感谢任何帮助。 提前谢谢..
答案 0 :(得分:1)
CASE可以简化为
CAST(CASE
WHEN date1 = 0 AND date2 = 0 THEN NULL
WHEN date1 > date2 THEN date1
ELSE date2
END - 19000000 AS DATE) AS min_date
格式化日期:
min_date (FORMAT 'mmm,byyyy') (CHAR(9))