我目前正在尝试理解一些代码,对于我自己的一生,我无法弄清楚CASE语句中的负号/减号运算符在做什么。当我尝试删除它时,它破坏了可视化。
这是弄清楚查询的这一部分到底做什么的一个更大难题的一部分。我知道这是检查年份的某种计数器,如果年份是2017,则提取月份。如果不是2017年,那么它将提取从现在起12个月的月份,但是我不确定它的工作原理。在此CASE语句或此函数中对负/负运算符的任何深入了解都将不胜感激。
MAX(
CASE WHEN (- CASE WHEN EXTRACT(year FROM premium_creation_date) = 2017 --?? some sort of counter
THEN EXTRACT(month FROM premium_creation_date)
ELSE
EXTRACT(month FROM premium_creation_date) + 12
END
+ CASE WHEN EXTRACT(year FROM user_creation_date) = 2017
THEN EXTRACT(month FROM user_creation_date)
ELSE
EXTRACT(month FROM user_creation_date) + 12
END
) = 1
THEN unique_user_count
ELSE
NULL
END
) AS restriction
答案 0 :(得分:0)
-
更改CASE
结果的符号。
当CASE
的日期为2017年时,给出premium_creation_date
的月份。否则为月份加12。
例如2017-05-04
在CASE
中产生5,这在-
生效后变为-5。对于2018-07-06
,其值为7 + 12 = 19,因此为-19。
实际上,您可以将整个过程转过来,然后从第二个中减去第一个CASE
。看起来可能更清楚。