作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的数据库中有此示例数据:
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/
我是一名优秀的程序员,十分优秀!