«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно получить первую и последнюю записи сгруппированных данных в MySQL?

Как эффективно получить первую и последнюю записи сгруппированных данных в MySQL?

Опубликовано 16 ноября 2024 г.
Просматривать:190

How to Efficiently Retrieve First and Last Records of Grouped Data in MySQL?

Извлечение первой и последней записей сгруппированных данных с помощью агрегатных функций в MySQL

В MySQL при извлечении данных из сгруппированных записей с помощью агрегатных функций, может быть сложно получить первую и последнюю записи группы. Хотя это можно сделать с помощью нескольких запросов, для больших таблиц это может быть неэффективно.

Чтобы оптимизировать этот процесс, MySQL предлагает более эффективное решение, используя функции GROUP_CONCAT и SUBSTRING_INDEX .

Используя GROUP_CONCAT и SUBSTRING_INDEX

Используя эти функции вместе, вы можете объединить значения из группы, а затем извлечь первое и последнее значения с помощью SUBSTRING_INDEX. Вот как:

SUBSTRING_INDEX(GROUP_CONCAT(CAST(open AS CHAR) ORDER BY datetime), ',', 1) AS open
SUBSTRING_INDEX(GROUP_CONCAT(CAST(close AS CHAR) ORDER BY datetime DESC), ',', 1) AS close

Как это работает:

  • GROUP_CONCAT объединяет все значения открытия или закрытия в одну строку, отсортированную по столбцу datetime.
  • SUBSTRING_INDEX извлекает первое и последнее значения из объединенной строки путем ее разделения через запятую (','). Аргумент '1' указывает первое или последнее вхождение.

Пример:

Рассмотрим следующий запрос:

SELECT MIN(low_price), MAX(high_price),
SUBSTRING_INDEX(GROUP_CONCAT(CAST(open AS CHAR) ORDER BY datetime), ',', 1) AS open,
SUBSTRING_INDEX(GROUP_CONCAT(CAST(close AS CHAR) ORDER BY datetime DESC), ',', 1) AS close
FROM symbols
WHERE date BETWEEN(.. ..)
GROUP BY YEARWEEK(date)

Этот запрос эффективно извлекает первую (открытую) и последнюю (закрытую) записи для каждой группы, минимизируя время обработки больших таблиц.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3