ВЫБЕРИТЕ МАКСИМАЛЬНЫЙ СТОЛ РАЗДЕЛЕНИЯ - PullRequest
0 голосов
/ 14 января 2019

У меня есть таблица с разделом на дату (транзакция_ время), и у меня есть проблема с выбором MAX.
Я пытаюсь получить строку с наибольшей отметкой времени, если получу более 1 строки в результате на один идентификатор.

Пример данных:

1. ID = 1 , Transaction_time = "2018-12-10 12:00:00"
2. ID = 1 , Transaction_time = "2018-12-09 12:00:00"
3. ID = 2 , Transaction_time = "2018-12-10 12:00:00"
4. ID = 2 , Transaction_time = "2018-12-09 12:00:00"

Результат, который я хочу:

1. ID = 1 , Transaction_time = "2018-12-10 12:00:00"
2. ID = 2 , Transaction_time = "2018-12-10 12:00:00"

Это мой запрос

SELECT ID, TRANSACTION_TIME FROM `table1` AS T1
WHERE TRANSACTION_TIME = (SELECT MAX(TRANSACTION_TIME)
                            FROM `table1` AS T2
                           WHERE T2.ID = T1.ID )

Я получаю ошибку:

Ошибка: невозможно выполнить запрос к таблице table1 без фильтра столбец (столбцы) «TRANSACTION_TIME», который можно использовать для раздела ликвидация

Ответы [ 2 ]

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

можно сделать так:

SELECT id, MAX(transaction_time) FROM `table1` GROUP BY id;
0 голосов
/ 14 января 2019

Похоже, что BigQuery не коррелирует подзапрос в предложении WHERE. Я не знаю, как исправить ваш текущий подход, но вы можете просто использовать ROW_NUMBER здесь:

SELECT t.ID, t.TRANSACTION_TIME
FROM
(
    SELECT ID, TRANSACTION_TIME,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY TRANSACTION_TIME DESC) rn
    FROM table1
) t
WHERE rn = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...