MySQL根据最后一条记录的日期过滤

时间:2016-04-11 05:54:58

标签: mysql sql

我有两个具有以下结构的表:

Table items:

 - id (int)

Table item_events:

 - item_id (int)
 - created_at (DateTime)

每个项目可以包含零个,一个或多个item_events。我需要找到在两个特定日期之间创建最后 item_event的所有项目。我知道我已经构建了以下SQL查询:

SELECT DISTINCT `items`.* 
FROM `items` INNER JOIN `item_events` ON `items`.`id` = `item_events`.`item_id` 
WHERE (item_events.created_at >= '2016-01-01 00:00:00') AND (item_events.created_at <= '2016-01-05 23:59:59');

但是,此查询选择在给定日期之间具有item_event的任何项目,即使此item_event不是与项目相关的最后一项。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

您可以使用包含每created_at的最新item_id值的派生表:

SELECT `items`.* 
FROM `items` 
INNER JOIN (
   SELECT `item_id`, MAX(`created_at`) AS `created_at`
   FROM `item_events`
   GROUP BY `item_id`
) AS `item_events` ON `items`.`id` = `item_events`.`item_id` 
WHERE (item_events.created_at >= '2016-01-01 00:00:00') AND
      (item_events.created_at <= '2016-01-05 23:59:59');