У меня есть таблица BigQuery, подобная этой:
+------+------------+------------------+
| Name | date | order_id | value |
+------+------------+----------+-------+
| JONES| 2019-01-03 | 11 | 10 |
| JONES| 2019-01-05 | 12 | 5 |
| JONES| 2019-06-03 | 13 | 15 |
| JONES| 2019-07-03 | 14 | 20 |
| John | 2019-07-23 | 15 | 10 |
+------+------------+----------+-------+
, и мне нужно добавить столбцы, которые имеют значения из определенного order_id (означает, что order_id, который мы не знаем, может только посчитать его), например, когда order_count будетбудет 3. Для решения первого порядка будет так, и найденный последний order_id также не является большой проблемой:
WITH data AS (
SELECT "JONES" name, DATE("2019-01-03") date, "11" order_id, 10 value
UNION ALL
SELECT "JONES", DATE("2019-01-05"), "12", 5
UNION ALL
SELECT "JONES", DATE("2019-06-03"), "13", 15
UNION ALL
SELECT "JONES", DATE("2019-07-03"), "14", 20
UNION ALL
SELECT "John", DATE("2019-07-23"), "15", 10
)
SELECT name,
ARRAY_AGG(STRUCT(DATE as f_date) ORDER BY order_id LIMIT 1)[OFFSET(0)].*,
max(order_id) AS l_id,
min(order_id) as f_id,
SUM(value) AS total
FROM DATA
GROUP BY name
Вывод:
+------+------+------------+-----+------+
| name | f_id | f_date |l_id | total|
+------+------+------------+-----+------+
| JONES| 11 | 2019-01-03 | 14 | 50 |
| John | 15 | 2019-07-23 | 15 | 10 |
+------+------+------------+-----+------+
Есть ли так жечтобы получить значения для последнего порядка и значения, когда счетчик order_id будет равен 3 по имени?
Вывод:
+------+----------+----+----+-----+-----+----------+-----------+
| name |f_date |f_id|l_id|total|3_id | 3_date | l_date |
+------+----------+----+----+-----+-----+----------+-----------+
| JONES|2019-01-03| 11 | 14 | 50 |13 |2019-06-03| 2019-07-03|
| John |2019-07-23| 15 | 15 | 10 |NULL |NULL | 2019-07-23|
+------+----------+----+----+-----+-----+----------+-----------+
Я полагаю, что должно быть что-то с Case, но здесь не работаетс агрегацией для нечисловых значений:
(CASE WHEN order_id = l_id THEN date ELSE Null END) AS l_date