从多个ID获取最后一行日期

时间:2012-08-14 04:16:41

标签: mysql sql database

我正在制作应用程序更新程序的后端,并使用我的服务器来跟踪所有文件和修订。

目前我的数据库中有两个表:

dev_version_control_files
Columns: FileID, FileName

dev_version_control_versions
Columns: VersionID, FileID, Version, DateReleased, FileLocation

files表为每个受版本控制的文件保留一条记录。版本表为每个文件的每个版本保留一条记录,以及发布日期,版本号和位置。

现在我想要的是获取files表中每个文件的最后一条记录(更新)。这应该由date字段决定,该字段保存从发布时开始的unix时间戳。

每次发出更新请求时,我都不想遍历版本表中的每一行,那么可以在一个查询中执行此操作吗?

3 个答案:

答案 0 :(得分:4)

我不是SQL专家,但这会有用吗?

SELECT f.*, v.DateReleased
FROM dev_version_control_files f
INNER JOIN (
  SELECT FileId, MAX(DateReleased) AS DateReleased
  FROM dev_version_control_versions
  GROUP BY 1) v ON f.FileID = v.FileID

我现在要在示例表上对此进行测试以查看(我认为某些语法可能已关闭),但我们的想法是从versions表中提取最大日期并按ID分组,然后加入ID上的files表。这是你在做什么的吗?

答案 1 :(得分:4)

您需要先获得每个DateReleased的{​​{1}}的最大值FileID之后加入dev_version_control_filesdev_version_control_versions

SELECT a.*, b.Version, DateReleased
FROM    dev_version_control_files a 
            INNER JOIN dev_version_control_versions b
                on a.FileID = b.FileID
            INNER JOIN
            (
                SELECT FileID, MAX(DateReleased) MaxDate
                FROM dev_version_control_versions
                GROUP BY FileID
            ) c ON b.FileID = c.FileID AND
                   b.DateReleased = c.MaxDate

答案 2 :(得分:1)

假设您在第二个表中至少有一个版本记录:

SELECT FileID, FileName, MAX(DateReleased)
FROM dev_version_control_files
INNER JOIN dev_version_control_versions ON FileID
GROUP BY FileID, FileName

这不是确切的SQL,它是我如何处理这个问题的粗略想法。