具有两个日期约束的一对多查询

时间:2012-05-25 23:13:49

标签: php mysql one-to-many

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

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中检索条目,其中最新版本(项目)在请求的日期($ 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提供任何帮助。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分: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是符合this documentation page中列出的日期时间和时间戳文字标准(不是日期文字!)的字符串。