эффективно поиск максимальных значений и связанных данных в больших таблицах SQL
]Часто запросы базы данных требуют поиска максимального значения в столбце и получения соответствующих данных из других столбцов в одной строке. Это особенно сложно с очень большими наборами данных. Рассмотрим таблицу, в которой необходимо найти самый высокий номер версии для каждого уникального идентификатора, а также связанный с ним тег:
]пример таблицы:
ID | tag | version
----- ----- -----
1 | A | 10
2 | A | 20
3 | B | 99
4 | C | 30
5 | F | 40
желаемый результат:
ID | tag | version
----- ----- -----
2 | A | 20
3 | B | 99
4 | C | 30
5 | F | 40
select операторы или простой Group by
с max
могут быть невероятно медленными. В гораздо более эффективном решении используется row_number ()
функция окна: ]
SELECT s.id, s.tag, s.version
FROM (
SELECT t.*,
ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY t.version DESC) AS rnk
FROM YourTable t
) s
WHERE s.rnk = 1;
]
]
] он назначает уникальный ранг ( rnk )) на каждую строку в каждой id
в порядке убывания, что означает, что самая высокая версия получает ранг 1.
]
]
]
rnk = 1 . Это эффективно дает нам строку с максимальной версией для каждого
id .
]
]
]
row_number () обеспечивает чистый и эффективный способ достижения желаемого результата.
]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3