使用SQL聚合函数和JOIN

时间:2010-12-15 20:53:10

标签: join group-by sybase aggregate

我有两个表 - tool_downloads和tool_configurations。我正在尝试检索数据库中每个工具的最新构建日期。 DB的布局很简单。一个名为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

我知道问题与分组/聚合数据和连接有关。我无法真正搜索谷歌,因为我不知道我遇到的问题的名称。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:3)

解决方案是:

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