【发布时间】:2020-09-17 06:18:11
【问题描述】:
我有一张这样的桌子
ID START END VALUE
1 2010-01-01 2013-12-31 RED
1 2015-01-01 2015-04-11 BLUE
2 2012-01-01 2013-06-05 YELLOW
2 2013-08-04 2013-12-31 RED
2 2017-01-01 2018-12-31 GREY
期望的输出:
ID YEAR VALUE
1 2010 RED
1 2011 RED
1 2012 RED
1 2013 RED
1 2015 BLUE
2 2012 YELLOW
2 2013 RED
2 2017 GREY
2 2018 GREY
我尝试过的:
select
case
when (START > '2010-01-01' or END < '2010-12-31') = TRUE THEN '2010'
when (START > '2011-01-01' or END < '2011-12-31') = TRUE THEN '2011'
...
但这并没有得到所有值,例如 YEAR = 2011 的 VALUE = RED。我得到 YEAR = 2010 的 VALUE = RED,所以在开始或结束日期中只表示一年的日期。
【问题讨论】:
-
OUTER JOIN 一年帮助表/cte.
-
你的 dbms 是什么?
-
你试过存储过程吗?
-
我必须用 sql 来做这件事。
-
您使用的是什么 DBMS?什么版本?您可能需要在这里进行递归查询。