MySQL - 选择具有最大时间戳的唯一列

时间:2016-01-13 23:09:57

标签: mysql sql

我正在尝试准备一个查询,而且我很难用它。我需要一些MySQL大师来帮忙...

以下表为例......

CREATE TABLE order_revision ( id int(11) NOT NULL, parent_order_id int(11) NOT NULL, user_id int(11) DEFAULT NULL, sub_total decimal(19,4) NOT NULL DEFAULT '0.0000', tax_total decimal(19,4) NOT NULL DEFAULT '0.0000', status smallint(6) NOT NULL DEFAULT '1', created_at int(11) NOT NULL, updated_at int(11) DEFAULT NULL )

我需要一个查询来选择所有唯一的' parent_order_id'使用max' updated_at'值。此查询应返回具有唯一' parent_order_id的所有行,具体取决于< updated_at'的最大时间戳。柱。

换句话说,返回的每一行都应该有一个唯一的' parent_order_id'并且是< updated_at'的最大时间戳。列。

基本上这个查询会找到最新的"订单修订版"对于每个"父订单"

2 个答案:

答案 0 :(得分:1)

你的意思是:

SELECT parent_order_id,max(updated_at) FROM order_revision GROUP BY parent_order_id

对于MySQL,GROUP BY - 子句甚至不是必需的,但我会将其包含在内以便澄清(大多数其他符合SQL的服务器都需要它)。

答案 1 :(得分:1)

对于任何有兴趣的人来说,这个问题原来是我正在寻找的......

SELECT main.* FROM order_revision AS main WHERE main.id = ( SELECT sub.id FROM order_revision AS sub WHERE main.parent_order_id = sub.parent_order_id ORDER BY sub.updated_at DESC LIMIT 1 );