Ниже для BigQuery Standard SQL
#standardSQL
SELECT AS value IF(arr_2[OFFSET(0)].cnt >= 60, arr_2[OFFSET(0)], arr_1[OFFSET(0)])
FROM (
SELECT id,
ARRAY_AGG(t ORDER BY PARSE_DATE('%d/%m/%Y', date_time) DESC LIMIT 1) arr_1,
ARRAY_AGG(t ORDER BY cnt DESC LIMIT 1) arr_2
FROM `project.dataset.table` t
GROUP BY id
)
Примечание: я предполагаю, что формат ваших данных - дд / мм / гггг.Если это мм / дд / гггг - вы должны использовать «% m /% d /% Y» в PARSE_DATE () вместо
Если применить выше к фиктивным данным в вашем вопросе, как показано ниже
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'x' id, 1 store_id, 50 cnt, '1/1/2017' date_time UNION ALL
SELECT 'x', 2, 20, '1/2/2017' UNION ALL
SELECT 'x', 3, 30, '1/1/2018' UNION ALL
SELECT 'y', 1, 70, '1/1/2017' UNION ALL
SELECT 'y', 2, 30, '2/1/2018' UNION ALL
SELECT 'z', 1, 100, '1/1/2019'
)
SELECT AS value IF(arr_2[OFFSET(0)].cnt >= 60, arr_2[OFFSET(0)], arr_1[OFFSET(0)])
FROM (
SELECT id,
ARRAY_AGG(t ORDER BY PARSE_DATE('%d/%m/%Y', date_time) DESC LIMIT 1) arr_1,
ARRAY_AGG(t ORDER BY cnt DESC LIMIT 1) arr_2
FROM `project.dataset.table` t
GROUP BY id
)
ORDER BY id
результат равен
Row id store_id cnt date_time
1 x 3 30 1/1/2018
2 y 1 70 1/1/2017
3 z 1 100 1/1/2019