我必须为一种版本控制系统编写报告查询,我需要检索最新版本的基于日期的报告变体。简化的表结构是:
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提供任何帮助。
答案 0 :(得分:2)
答案 1 :(得分:2)
对你问题中尚不清楚的事情做一些假设,我想这可能是你正在寻找的问题:
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中列出的日期时间和时间戳文字标准(不是日期文字!)的字符串。