mysql - SQL - 删除较早日期的所有重复项

标签 mysql sql

我的数据库中有此示例数据:

Order number | Date       | Item
23           | 2017-05-23 | Apple
23           | 2017-05-23 | Banana
24           | 2017-05-24 | Apple
23           | 2018-03-21 | Apple
23           | 2018-03-21 | Banana

这可能看起来像一个奇怪的 SQL 查询,但我想获取每天的所有订单号及其包含的日期和项目,但如果订单号已在多个日期注册,我只想要“最旧的”实例。

在这种情况下答案应该是:

Order number | Date       | Item
23           | 2017-05-23 | Apple
23           | 2017-05-23 | Banana
24           | 2017-05-24 | Apple

感谢您的帮助。

最佳答案

除了 Gordon 提供的之外,编写此查询的更标准方法是仅加入子查询,该子查询查找每个订单/项目组的最新记录:

SELECT o1.*
FROM orders o1
INNER JOIN
(
    SELECT o_num, item, MIN(Date) AS min_date
    FROM orders
    GROUP BY o_num, item
) o2
    ON o1.o_num = o2.o_num AND o1.item = o2.item AND o1.Date = o2.min_date;

在支持基本分析函数的 MySQL 8+ 中,我们可以更简洁地将此查询编写为:

SELECT o_num, Date, item
FROM
(
    SELECT o_num, Date, item,
        ROW_NUMBER() OVER (PARTITION BY o_num, item ORDER BY Date) rn
    FROM orders
) t
WHERE rn = 1;

关于mysql - SQL - 删除较早日期的所有重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51636511/

相关文章:

SQL查询性能统计信息多次返回

php - 如何使用codeigniter从表中获取数据

java - MysqldResource 不适用于 MacOS Catalina

sql - 过滤并保留最近的重复项

java - 更新多个表 JDBC

SQL连接和分组问题

输入 MYSQL 命令但我不明白响应

php - 检查 textarea 不工作 php

php - 关于通过 mysqli 使用更新

sql - 将外键关系限制为相关子类型的行