[英]MySQL filter by date of last record
I have two tables with the following structure: 我有两个具有以下结构的表:
Table items:
- id (int)
Table item_events:
- item_id (int)
- created_at (DateTime)
Each item can have zero, one or more item_events. 每个项目可以有零个,一个或多个item_events。 I need to find all the items whose last item_event was created between two specific dates. 我需要找到所有最后一个 item_event在两个特定日期之间创建的项目。 Up to know I have built the following SQL query: 据了解,我已经建立了以下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');
However, this query is selecting any item that has an item_event between the given dates, even though this item_event is not the last one related to the item. 但是,此查询将选择在给定日期之间具有item_event的任何项目,即使该item_event不是与该项目相关的最后一个项目。 Any help would be appreciated. 任何帮助,将不胜感激。
You can use a derived table that contains the latest created_at
value per item_id
: 您可以使用包含每个item_id
最新的created_at
值的派生表:
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');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.