После нашего обсуждения я понимаю, что вы пытались выбрать много строк данных, которые соответствуют фильтру id и max (значение) . Поэтому я могу предложить вам следующий скрипт:
SELECT
DISTINCT a.*
FROM
`test-proj-261014.sample.id_value` a
RIGHT JOIN (
SELECT
id,
MAX(value) AS max_val
FROM
`test-proj-261014.sample.id_value`
GROUP BY
id
ORDER BY
id) b
ON
a.id = b.id
AND a.value = b.max_val
WHERE
a.value IS NOT NULL
ORDER BY
id;
Не то чтобы я использовал SELECT DISTINCT , который не будет выбирать дублированные данные. Кроме того, из-за возможности существования нулевых значений я добавил условие *** WHERE a.value NOT NULL ***, которое не будет выбирать строки, не соответствующие условию.
Приведенный выше запрос должен решить проблему, однако, если вы обнаружите какое-либо несоответствие с ожидаемым количеством строк, я рекомендую вам изучить ваш набор данных и выяснить причину наличия дополнительных или меньших строк. Для этого можно использовать различные типы объединений, одним примером может быть следующий запрос:
SELECT
a.*
FROM
`test-proj-261014.sample.id_value` a
LEFT JOIN (
SELECT
id,
MAX(value) AS max_val
FROM
`test-proj-261014.sample.id_value`
GROUP BY
id
ORDER BY
id) b
ON
a.id = b.id
AND a.value = b.max_val
WHERE
b.max_val IS NULL
ORDER BY
id;
Этот запрос извлекает все значения, которых нет в окончательном выводе, созданном первым запросом. Это поможет вам лучше понять данные, с которыми вы имеете дело.
Надеюсь, это поможет.