2

我必须为一种版本控制系统编写报告查询,在该系统中我需要检索最新版本的基于日期的报告变体。简化的表结构是:

items_register: ir_id (primary, auto inc), ir_name (varchar)
items: i_id (primary, auto inc), i_register_id (int), i_version_name (varchar), i_datetime (datetime), i_date_expiry (datetime)

items_register 中的每个条目都有多个关联版本,作为条目存储在 items 表中 - i_datetime 的最高值是最新版本。

我想从 items_register 中检索条目,其中最新版本(item)在请求的日期($f_date)之后具有 i_date_expiry。

我想我需要以某种方式加入表格,按 i_datetime 对项目进行排序,将它们限制为 1,以便我获得最新版本,然后检查 i_date_expiry 是否在 $f_date 之后,如果是则检索字段。

我要检索的字段是 items_register.ir_id、items_register.ir_name、items.i_version_name、items.i_datetime。

TIA 寻求帮助。

4

2 回答 2

2

也许这可能有用? http://dev.mysql.com/doc/refman/5.0/en/example-maximum-column-group-row.html

于 2012-05-25T23:31:37.863 回答
2

看起来您正在搜索“ groupwise max ”模式。

对您的问题中仍不清楚的事情做出一些假设,我认为这可能是您正在寻找的查询:

SELECT items_register.ir_id, items_register.ir_name, 
    items.i_version_name, items.i_datetime
FROM items_register
JOIN
(
    SELECT items.i_register_id, 
        MAX(items.i_datetime) AS most_recent_item_datetime
    FROM items
    WHERE items.i_date_expiry > '$f_date'
    GROUP BY items.i_register_id
) AS item_date ON item_date.i_register_id = items_register.ir_id
JOIN items ON items.i_register_id = items_register.ir_id 
    AND items.i_datetime = item_date.most_recent_item_datetime

请记住,这假定 $f_date 是一个符合本文档页面中列出的日期时间和时间戳文字(不是日期文字!)标准的字符串。

于 2012-05-28T00:23:46.793 回答