bigquery中的增量变量(在case-when中)

64jmpszr  于 2021-08-01  发布在  Java
关注(0)|答案(2)|浏览(336)

我想在某个条件之后增加一个变量。

DECLARE cpt INT64;
SET cpt = 0;

WITH CPT As (
SELECT
  Date,
  A,
  B,
  C,
  D,
  E,
  F,
  G,

  CASE
    WHEN B > 1 THEN ---Vérification si le capteur est fiable
      CASE
        WHEN A>1 THEN ---Cas numéro 1
          CASE
            WHEN A < (B * (1 + 0.05)) AND A > (B * (1 - 0.05)) THEN (cpt+1)
          END
        WHEN C>1 THEN ---Cas numéro 2
          CASE
            WHEN E>1 THEN  ---Si la donnée est fiable
              CASE
                WHEN (C+E) < (B * (1 + 0.05)) AND (C+E) > (B * (1 - 0.05)) THEN (cpt + 1)
              END
            ELSE --- Si elle ne l'est pas
              CASE
                WHEN D >= 0 AND F>= 0 AND G>=0  THEN ---On vérifie que toutes ces données sont >= 0
                  CASE
                    WHEN (C+(D+F+G)) < (B * (1 + 0.05)) AND (C+(D+F+G)) > (B * (1 - 0.05)) THEN (cpt + 1)
                  END
                ELSE  ---Si elles ne le sont pas
                  CASE
                    WHEN (C+0) < (B * (1 + 0.05)) AND (C+0) > (B * (1 - 0.05)) THEN (cpt + 1)
                  END
              END
          END
        WHEN E>1 THEN  ---Cas numéro 3
          CASE
            WHEN D>=0 AND G >= 0 AND F>=0 THEN ---On vérifie que toutes ces données sont >= 0
              CASE
                WHEN (E + (G+D+F)) < (B * (1 + 0.05)) AND (E + (G+D+F)) > (B * (1 - 0.05)) THEN (cpt + 1)
              END
            ELSE
              CASE
                WHEN (E + 0) < (B * (1 + 0.05)) AND (E + 0) > (B * (1 - 0.05)) THEN (cpt + 1)
              END
          END
      END
  END AS Cpt_Vap_Stable,

FROM
  my_table
WHERE DATETIME_DIFF(CAST("2020-05-11 21:00:00" AS DATETIME),DATETIME(Date),HOUR)<=1 AND DATETIME_DIFF(CAST("2020-05-11 21:00:00" AS DATETIME),DATETIME(Date),SECOND) > 1
ORDER BY Date
)

这个代码不起作用。我有这么多其他的情况,所以这只是一个例子,让你看看我的问题。谢谢您。
编辑:这就是我得到的,但我希望变量增加。
为了解释一下,我有一个带有列的表,我做了一些例子,在输出表中,我只需要时间戳和这个著名的计数器。
这就是我想要的:
|2020-05-11 21:00:00 | 0
|2020-05-11 21:01:00 | 1验证
|2020-05-11 21:02:00 | 2验证
|2020-05-11 21:03:00 | 3验证
|2020-05-11 21:04:00 | 3未验证
|2020-05-11 21:05:00 | 3未验证
|2020-05-11 21:04:00 | 4验证

3phpmpom

3phpmpom1#

您可以根据条件尝试使用sum函数。例如,假设我们有一个带有id列的表,并且有三个不同的id(1,2,3),因此我可以执行以下操作:

SELECT sum(case when ID = 1 then 1 else 0 end) as new_column FROM 
 `<table>`

这样,我们将变量new\列作为id列中的1个数。
也可以按某列排序,例如:

SELECT sum(case when ID = 1 then 1 else 0 end) over(order by 
datecolumn) as new_column FROM `<table>`

使用公共bigquery数据集的嵌套条件:

SELECT
  SUM(CASE
        WHEN venueSurface = "grass" THEN 
         CASE
            WHEN venueCapacity = 50398 THEN
               CASE 
                  WHEN venueState = "CO" THEN 1
                  ELSE 0 
               END
            WHEN venueCapacity= 31042 THEN 2 ELSE 0 
         END
      END
)
FROM
  `bigquery-public-data.baseball.games_wide`
1tuwyuhd

1tuwyuhd2#

听起来你想 row_number() :

select t.*, row_number() over (order by date)
from t;

您没有在问题中解释您想要实现的真正逻辑是什么,但是 row_number() 似乎是解决办法。

相关问题