我的数据库中有以下示例数据:
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
感谢您的帮助。
答案 0 :(得分:1)
除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;
答案 1 :(得分:0)
这是您想要的吗?
select o.*
from orders o
where (o.order, o.date) in (select o2.order, min(o2.date) from orders o2);
答案 2 :(得分:0)
我认为最简单的方法是:
Select [order number], Min([Date]) as [Oldest Date], [Item]
From [your table]
Group by [order number], [Item]
答案 3 :(得分:0)
您可以使用 correlated subquery
:
select t.*
from table t
where date = (select max(t1.date) from table t1 where t1.orderno = t.orderno);
也许您还需要where
子句中的项目。