Elliottが言及したように、あなたは順序を定義する方法が必要です。テーブルには、それを定義するために使用する列があります。 orderable型の任意の列を使用できます。クエリ下のあなたが求めて何になる
#standardSQL
SELECT
pos,
team_cd,
DENSE_RANK() OVER(PARTITION BY grp ORDER BY pos) AS RANK
FROM (
SELECT
pos,
team_cd,
COUNTIF(team_cd) OVER(ORDER BY pos ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS grp
FROM `project.dataset.table`
)
-- ORDER BY pos
は、あなたはそれが
以下のように、あなたの質問からダミーデータを使用してプレイする/テストすることができます(これはBigQueryの標準SQLのためです) -
Asumingテーブル内の
pos
の列があります
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1 AS pos, FALSE AS team_cd UNION ALL
SELECT 2, TRUE UNION ALL
SELECT 3, FALSE UNION ALL
SELECT 4, FALSE UNION ALL
SELECT 5, FALSE UNION ALL
SELECT 6, TRUE UNION ALL
SELECT 7, FALSE UNION ALL
SELECT 8, TRUE
)
SELECT
pos,
team_cd,
DENSE_RANK() OVER(PARTITION BY grp ORDER BY pos) AS RANK
FROM (
SELECT
pos,
team_cd,
COUNTIF(team_cd) OVER(ORDER BY pos ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS grp
FROM `project.dataset.table`
)
ORDER BY pos
それでもBigQueryのレガシーSQLにバインドされたいくつかの理由で、あなたは以下の使用(ただしmoving to Standard SQLを考える - それは非常にBigQueryのチームによって推奨される)ことができる場合
#legacySQL
SELECT
pos,
team_cd,
DENSE_RANK() OVER(PARTITION BY grp ORDER BY pos) AS RANK
FROM (
SELECT pos, team_cd, IFNULL(grp, 0) grp
FROM (
SELECT
pos,
team_cd,
SUM(team_cd) OVER(ORDER BY pos ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS grp
FROM [project:dataset.table]
)
)
ORDER BY pos
この順序を定義する方法が必要です。行番号など、別の列を使用できますか?それ以外の場合は、そのようなクエリを書く方法がありません。 –