использование агрегатных функций SQL с JOIN - PullRequest
1 голос
/ 15 декабря 2010

У меня есть две таблицы - tool_downloads и tool_configurations. Я пытаюсь получить самую последнюю дату сборки для каждого инструмента в моей базе данных. Компоновка БД проста. Одна таблица с именем tool_downloads отслеживает время загрузки инструмента. Другая таблица называется tool_configurations и хранит фактические данные об инструменте. Они связаны вместе с помощью tool_conf_id.

Если я выполню следующий запрос, в котором пропущены даты, я получу обратно 200 записей.

SELECT DISTINCT a.tool_conf_id, b.tool_conf_id
FROM tool_downloads a
JOIN tool_configurations b 
ON a.tool_conf_id = b.tool_conf_id
ORDER BY a.tool_conf_id

Когда я пытаюсь добавить информацию о дате, я получаю сотни тысяч записей! Вот запрос, который терпит неудачу ужасно.

SELECT DISTINCT a.tool_conf_id, max(a.configured_date) as config_date, b.configuration_name
FROM tool_downloads a
JOIN tool_configurations b
ON a.tool_conf_id = b.tool_conf_id
ORDER BY a.tool_conf_id

Я знаю, что проблема связана с группированием / агрегированием данных и объединений. Я не могу выполнить поиск в Google, так как не знаю названия проблемы, с которой столкнулся. Любая помощь будет оценена.

1 Ответ

3 голосов
/ 15 декабря 2010

Решение:

SELECT b.tool_conf_id, b.configuration_name, max(a.configured_date) as config_date
  FROM tool_downloads a
    JOIN tool_configurations b
      ON a.tool_conf_id = b.tool_conf_id
  GROUP BY b.tool_conf_id, b.configuration_name
...