sql - CASE WHEN 有四个日期
问题描述
我有四个日期时间列,我想要一个额外的字符串列,X
当行中的最近日期比当前日期早 5 年时显示值。我正在努力实现这一目标,CASE WHEN
但我正在努力让 SQL 仅将当前日期与最近日期进行比较。这是我的数据:
ID | StartDate | EndDate | Modified | DoneDate
1 2013-12-31 2015-03-20 2013-12-31 NULL
2 2013-06-27 2013-07-24 2013-06-27 NULL
3 1991-07-11 2001-07-11 2017-10-10 2017-10-10
这是期望的结果:
ID | StartDate | EndDate | Modified | DoneDate | Marked
1 2013-12-31 2015-03-20 2013-12-31 NULL NULL
2 2013-06-27 2013-07-24 2013-06-27 NULL X
3 1991-07-11 2001-07-11 2017-10-10 2017-10-10 NULL
任何想法如何在案例中实现这一目标?我目前有这个,但它不查看最近的日期并用 X 标记每一行:
,CASE
WHEN DATEDIFF(YEAR, Modified, GETDATE()) >= 5 THEN 'X'
WHEN DATEDIFF(YEAR, EndDate, GETDATE()) >= 5 THEN 'X'
ELSE ' '
END as 'Marked'
我们可以假设DoneDate
>= Modified
>= EndDate
>= StartDate
。
解决方案
按照 CBroe 对日期可能值的评论,您只需要以下顺序中的第一个非空值:DoneDate、ModifiedDate、StartDate、EndDate。
CASE
WHEN DATEDIFF(
YEAR,
COALESCE(DoneDate, ModifiedDate, StartDate, EndDate),
GETDATE()) >= 5 THEN 'X'
ELSE ' ' END AS 'Marked'
推荐阅读
- android - Firebase 令牌 ID 返回空值
- c++ - 如何从 C++ 代码与命令行程序交互
- load - appmaker 数据源更新速度不够快
- java - 在异步任务类中获取共享首选项
- python - 有没有办法在scrapy中禁止域?
- python - 从 analytics.usa.gov API 中提取特定日期
- google-app-engine - Stackdriver Debugger 不捕获快照
- html - 浮动后链接和品牌名称未对齐 - 纯 CSS
- powershell-ise - Powershell ISE 中的自定义键盘快捷键
- arrays - 非法偏移类型(Laravel)