Mysql 检测表上的最后一个活动

Mysql 检测表上的最后一个活动,mysql,Mysql,我有两个表格、订单和订单说明: 订单: orderID | customerID | orderName ----+------+------ 1 | 1 |测试 2 | 1 | 1234 3 | 1 |测试2 4 | 2 | ABC测试 订购说明: noteID | orderID | postedDate |消息 ----+-----+-----------+----- 1 | 1 | 2014-08-01 08:00:06 |测试 2 | 1 | 2014-08-

我有两个表格、订单和订单说明:

订单: orderID | customerID | orderName ----+------+------ 1 | 1 |测试 2 | 1 | 1234 3 | 1 |测试2 4 | 2 | ABC测试 订购说明: noteID | orderID | postedDate |消息 ----+-----+-----------+----- 1 | 1 | 2014-08-01 08:00:06 |测试 2 | 1 | 2014-08-04 13:15:45 |你好 3 | 2 | 2014-07-31 11:11:50 |嗨,世界 4 | 2 | 2014-08-01 12:16:32 |测试123 …我想你明白了

我想做的是检测是否有订单在X小时内没有更新

我想到了这个:

SELECT orders.orderID, postedDate FROM orders
JOIN orderNotes ON orders.orderID = orderNotes.orderID
WHERE orders.customerID = 1
AND postedDate <= NOW() - INTERVAL 2 HOUR
但是,这会检查orderNotes中的每一行。我怎样才能让它只检查最后一行?我想知道customerID=1的订单是否在2小时内未更新

下面是我当前SQL的演示:

创建一个包含最长日期的视图 在联接中使用视图
我找到了一个似乎有效的解决方案

SELECT orders.orderID, MAX(postedDate) AS maxDate
FROM orders
JOIN orderNotes ON orders.orderID = orderNotes.orderID
WHERE orders.customerID = 1
GROUP BY orders.orderID
HAVING MAX(postedDate) <= NOW() - INTERVAL 2 HOUR

演示:

什么是创建视图?就像创建临时表一样。。。引擎=内存@RocketHazmat是的,视图就像是一个临时表被填充到了Fly上。我试着运行它,但当我再次运行它时,它说maxOrderNotes已经存在了@RocketHazmat不会运行“创建视图”两次。这就像运行两次createtable。只需创建一个视图并使用它。我以前从未使用过视图,所以我不知道如何删除/更新它。它是否永远像一张桌子?我是否需要在每次添加行时更新它?既然我可以使用真实的表,为什么还要使用视图?我不明白这一点。有趣的是,这会增加查询处理时间吗?当我用EXPLAIN检查它时,它给出了相同的using TEMPORT;使用filesort作为视图查询;使用临时设备;使用filesort,但查询的运行时间只占视图运行时间的一小部分。它实际上是在使用索引,而视图并没有这样做。
SELECT orders.orderID, postedDate FROM orders
JOIN maxOrderNotes ON orders.orderID = maxOrderNotes.orderID
WHERE orders.customerID = 1
AND postedDate <= NOW() - INTERVAL 2 HOUR;

+---------+---------------------+
| orderID | postedDate          |
+---------+---------------------+
|       1 | 2014-08-04 10:15:45 |
|       2 | 2014-08-01 12:16:32 |
+---------+---------------------+
SELECT orders.orderID, MAX(postedDate) AS maxDate
FROM orders
JOIN orderNotes ON orders.orderID = orderNotes.orderID
WHERE orders.customerID = 1
GROUP BY orders.orderID
HAVING MAX(postedDate) <= NOW() - INTERVAL 2 HOUR