У меня есть таблица в следующей форме:
index, ingestion_id, a, b, c, d
0, '2020-04-22-1600', 0a, 0b, 0c, 0d
1, '2020-04-22-1700', 0a, 0b, 0c, 0d
2, '2020-04-22-1600', 1a, 1b, 1c, 1d
3, '2020-04-22-1700', 1a, 1b, 1c, 1d
4, '2020-04-22-1800', 1a, 1b, 1c, 1d
...
Я хотел бы извлечь все строки и столбцы, где ingestion_id
является самым высоким. Таким образом, он должен возвращать индекс 1 и индекс 4 для всех строк и столбцов.
Я нашел несколько примеров, но они требуют, чтобы мы предварительно определили столбцы , которые мы хотим выбрать. Я не знаю столбцы заранее, но я знаю, что таблица будет иметь столбец с именем ingestion_id
. Вот пример :
SELECT *
FROM (
SELECT MAX(ingestion_id) as ingestion_id, a, b, c, d
FROM table as t
GROUP BY a, b, c, d
ORDER BY a
)
Как выбрать все столбцы, где ingestion_id
является самым высоким, и сгруппировать по всем столбцам, кроме ingestion_id
?
БОНУС
Представьте себе таблицу, теперь имеющую форму:
index, ingestion_id, a, b, c, d
0, '2020-04-22-1600', 0a, 0b, 0c, 0d
1, '2020-04-22-1700', 0a, 0b, 0c, 0d
2, '2020-04-22-1600', 1a, 1b, 1c, 1d
3, '2020-04-22-1700', 1a, 1b, 1c, 1d
4, '2020-04-26-1800', 2a, 2b, 2c, 2d
5, '2020-04-26-1900', 2a, 2b, 2c, 2d
...
Ответ , предоставленный Гордоном Линоффом (по состоянию на 2020/04 год / 26) в этом случае отфильтровывает только строку 5, поскольку она является самой высокой ingestion_id
. Однако нам также понадобится строка 1 и строка 3, поскольку значения (за исключением столбца ingestion_id
) являются уникальными в других столбцах.