negative/minus case 语句中的运算符

negative/minus operator in case statement

我目前正在尝试理解一些代码,但我终究无法弄清楚 negative/minus 运算符在 CASE 语句中做了什么。当我尝试删除它时,它破坏了可视化。

这是一个更大难题的一部分,即弄清楚这部分查询的确切作用。我知道它是某种检查年份的计数器,如果年份是 2017 年,则提取月份。如果不是 2017 年,那么它会提取从现在起 12 个月后的月份,但我不确定它是如何工作的。任何对此 CASE 语句或此函数中的 negative/minus 运算符的深入了解将不胜感激。

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

- 更改 CASE 结果的符号。

当日期的年份是 2017 时,CASE 给出 premium_creation_date 的月份。否则就是月份加 12。

例如2017-05-04CASE 中产生 5,在 - 生效后得到 -5。对于 2018-07-06 那将是 7 + 12 = 19 因此 -19.

实际上,您可以将整个事情反过来,从第二个中减去第一个 CASE。这样看起来可能更清楚。