Получение следующего значения в качестве текущего значения в Bigquery - PullRequest
0 голосов
/ 15 мая 2019

У меня есть такие данные

Row order_id    date_order  partner_id  
1   SNB1905/0007786 2019-05-15 10:17:57 UTC 70959
2   SNB1905/0007786 2019-05-15 10:17:56 UTC 70959
3   SNB1904/0008810 2019-04-30 07:18:11 UTC 70959
4   SNB1902/0003122 2019-02-20 07:05:00 UTC 70959

Я хочу получить предыдущий order_id, а также преобразовать date_order в свой часовой пояс.Итак, я выполнил запрос, подобный этому

SELECT
  order_id,
  DATE(date_order,"Asia/Jakarta") AS date_only,
  partner_id,
  LAG(origin,1) OVER(PARTITION BY partner_id order by date_order) prev_order
FROM
  `my_table`
WHERE
  partner_id = 70959
ORDER BY
  date_order DESC

Результат, который я получаю, выглядит примерно так:

Row order_id    date_only   partner_id  prev_order  
1   SNB1905/0007786 2019-05-15 70959 SNB1904/0008810
2   SNB1905/0007786 2019-05-15 70959 SNB1905/0007786
3   SNB1904/0008810 2019-04-30 70959 SNB1902/0003122
4   SNB1902/0003122 2019-02-20 70959 null

Результат, который я хочу получить, выглядит так* Если order_id равен prev_order, я хочу получить предыдущее значение в столбце prev_order.

Пожалуйста, помогите мне решить эту проблему.Спасибо заранее.

1 Ответ

1 голос
/ 15 мая 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT
  order_id,
  date_only,
  partner_id,  
  ( SELECT order_id FROM UNNEST(prev_orders) prev_order
    WHERE t.order_id != order_id
    ORDER BY date_order DESC LIMIT 1
  ) prev_order
FROM (
  SELECT
    order_id,
    date_order,
    DATE(date_order,"Asia/Jakarta") AS date_only,
    partner_id,
    ARRAY_AGG(STRUCT(order_id AS order_id, date_order AS date_order)) 
      OVER(PARTITION BY partner_id ORDER BY date_order ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) prev_orders
  FROM `project.dataset.table`
) t
WHERE partner_id = 70959
-- ORDER BY date_order DESC

, если применить к образцу данных из вашего вопроса - результат

Row order_id        date_only   partner_id  prev_order   
1   SNB1905/0007786 2019-05-15  70959       SNB1904/0008810  
2   SNB1905/0007786 2019-05-15  70959       SNB1904/0008810  
3   SNB1904/0008810 2019-04-30  70959       SNB1902/0003122  
4   SNB1902/0003122 2019-02-20  70959       null     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...