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;
推荐阅读
- javascript - 当我保存文件时,fileReader onLoad 不起作用
- sql - 将十进制查询结果保存为变量 - 必须声明标量变量(INNER JOINS、2 DECIMAL PLACES、PRECISION AND SCALE SET)
- bioinformatics - 用于 Nanopore cDNA-seq 比对的 Minimap2 参考:找不到命令,为什么?
- python - Python中的联立微分方程
- python - 如何统一列名以使用熊猫附加数据框?
- java - 是否可以在没有插件的情况下调试 GWT Spring MVC 应用程序
- spring-boot - webflux http basic 仅在特定路径上,而所有其他路径都使用 JWT
- android - 如何将应用签名从 V1 升级到 V2?
- powershell - 包含在 Jenkins 管道脚本中时,Powershell 脚本不起作用
- reactjs - 手动刷新或写入时,React-router url 不起作用,找不到 404 页面