ROW_NUMBER () завершается ошибкой, когда таблица слишком большая - PullRequest
0 голосов
/ 01 января 2019

Я работаю с Bigquery, и мне нужно использовать ROW_NUMBER (), чтобы получить только первую строку, которая соответствует некоторому условию.

Пример:

select *except(rn)
from (
SELECT
  *,
  ROW_NUMBER() OVER (PARTITION BY id order by timedate desc) AS rn
FROM
 table
)
where rn = 1

Однако запроспотерпит неудачу, потому что таблица слишком большая.Как я могу применить такую ​​логику, не исчерпав ресурсы?

1 Ответ

0 голосов
/ 01 января 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY timedate DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.table` t
GROUP BY id

Вы можете протестировать, играть выше с фиктивными данными, как показано ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, 2 timedate, 3 z UNION ALL
  SELECT 1,4,5 UNION ALL
  SELECT 1,6,7 UNION ALL
  SELECT 2,8,9 UNION ALL
  SELECT 2, 10, 11
)
SELECT AS VALUE ARRAY_AGG(t ORDER BY timedate DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.table` t
GROUP BY id

результат равен

Row id  timedate    z    
1   1   6           7    
2   2   10          11   
...