如何根据MySQL中的“datetime”将当前记录与同一表中的下一个记录进行比较?
问题:我将使用Sakila示例数据库和it数据来解释这个问题,这样对您来说就更容易了。好的,我的问题是,我如何用“日期时间”来比较同一个表中的当前记录和下一个记录。这是表格的外观:如何根据MySQL中的“datetime”将当前记录与同一表中的下一个记录进行比较?,mysql,compare,Mysql,Compare,问题:我将使用Sakila示例数据库和it数据来解释这个问题,这样对您来说就更容易了。好的,我的问题是,我如何用“日期时间”来比较同一个表中的当前记录和下一个记录。这是表格的外观: payment_id customer_id staff_id rental_id amount payment_date last_update 1 1 1 76 2.99 25/05/2005 11:30:37 15/02/2006 22:12:30 2
payment_id customer_id staff_id rental_id amount payment_date last_update
1 1 1 76 2.99 25/05/2005 11:30:37 15/02/2006 22:12:30
2 1 1 573 0.99 28/05/2005 10:35:23 15/02/2006 22:12:30
3 1 1 1185 5.99 15/06/2005 00:54:12 15/02/2006 22:12:30
4 1 2 1422 0.99 15/06/2005 18:02:53 15/02/2006 22:12:30
5 1 2 1476 9.99 15/06/2005 21:08:46 15/02/2006 22:12:30
使用此示例中的上述解释,对于每个“员工id”,如何使用“当前”和“下一个”的“付款日期”将当前行与下一行进行比较,这样它只会带来一对记录,其中当前记录的金额与下一个记录的金额相同,比如current.amount=next.amount。这意味着每个记录都应该与下一个相同的“员工id”进行比较,以此类推
我目前正在使用这个查询,它完成了这项工作,但它需要永远。我知道它工作得很好,因为我设置了限制3,它带来了正确的限制。如果您有Sakila示例数据库,您也可以测试它:
SELECT * FROM payment a
JOIN payment b ON a.staff_id = b.staff_id AND a.payment_date > b.payment_date AND a.amount = b.amount
LEFT JOIN payment c ON a.staff_id = c.staff_id AND c.payment_date < a.payment_date AND c.payment_date > b.payment_date
WHERE c.payment_id IS NULL
LIMIT 3;
您能帮助我吗?您看过相关子查询了吗?它也可能很慢,但可能比那些连接更快……既然你有一个工作查询,你有没有尝试过优化它?@JohnRuddell Hi,我在相关子查询中遇到的问题是,它不会带来成对的记录。我需要两张匹配的唱片。AgRizzo我该怎么做?使用EXPLAIN命令确保您使用的是index@AgRizzo这就是我通过在上面的查询中添加EXPLAIN得到的结果,我无法正确格式化它:id、select_type、table、type、可能的_键、key、key_len、ref、rows、Extra'1'、SIMPLE、'a'、'ALL'、'idx_fk_staff_id',NULL、NULL、NULL、'16086',NULL'1'、'SIMPLE',‘b’、‘ref’、‘idx_-fk_-staff_-id’、‘idx_-fk_-staff_-id’、‘1’、‘sakila.a.staff_-id’、‘4021’、‘使用where’1’、‘SIMPLE’、‘c’、‘ref’、‘idx_-fk_-staff_-id’、‘idx_-fk_-fk_-staff-id’、‘1’、‘sakila.a.staff_-id’、‘402;“不存在”