mysql - mySQL - 查询以获取特定列的唯一值的前 2 条记录
问题描述
我有一个记录和处理产品订单的应用程序。从最初创建订单到最终提交订单以供履行,其 1 个或多个属性可能会被 1 个或多个员工在此过程中更改 1 次或多次。我将订单号和开始订单的员工存储在一个表中,然后将所有订单的所有更改(包括开始详细信息)存储在另一个表中。像这样的东西:
订单
ORDER_ID EMPLOYEE
1 dan
2 dan
3 fred
订单_活动
ACTIVITY_ID ORDER_ID UPDATER DATE QTY SIZE COLOR STATUS
1 1 dan 1/1/2017 5 m red new
2 1 dan 1/3/2017 15 m red updated
3 1 tom 1/9/2017 15 l red submitted
4 2 dan 1/1/2017 25 l blue new
5 2 tom 1/1/2017 25 l blue submitted
6 3 fred 1/9/2017 15 s red new
7 3 fred 1/10/2017 5 l red updated
8 3 fred 1/11/2017 5 m red updated
9 3 tom 1/11/2017 5 m red submitted
我需要显示发起订单的员工的 2 个最新订单以及订单的属性(数量、尺寸和颜色),就像状态更改为“已提交”时一样。
如果我只需要一个订单(最近的),我想我可以使用:
SELECT
Orders.EMPLOYEE,
Order_Activity.QTY,
Order_Activity.SIZE,
Order_Activity.COLOR FROM Orders
INNER JOIN Order_Activity
ON Orders.ORDER_ID = Order_Activity.ORDER_ID
ORDER BY Order_Activity.date DESC LIMIT 1
但是,我很难想象如何找到具有不同值的下一条记录,ORDER_ID
同时将其全部保存在一个查询中。
任何人都可以帮助我进行查询以产生类似的东西(基于上面提供的数据):
ORDER_ID EMPLOYEE QTY SIZE COLOR
3 fred 5 m red
1 dan 15 l red
还是不能在 1 个查询中完成?
解决方案
您可以将内部联接与最大日期组 da order_id 的子查询一起使用
select o.ORDER_ID, o.EMPLOYEE , oa.QTY, oa.SIZE, oa.SIZE
from Orders o
inner join Order_Activity oa on o.ORDER_ID = oa.ORDER_ID
inner join (
select ORDER_ID, max(date) max_date
from Order_Activity
group by ORDER_ID
) tt on tt.ORDER_ID = o.ORDER_ID
and tt.max_date = oa.date
推荐阅读
- asp.net - 如何将数据从一个视图发送到另一个视图,它是品牌、型号等。它不是一种形式
- python - 在python中将我的部分输出代码更改为字母数字
- javascript - net::ERR_ABORTED 4 在 nextjs 中出现此错误
- neo4j - Neo4J 动态数据模型
- devops - 如何使用具有特定标志值的 DevOps Api 获取工作项列表
- javascript - 如何访问对象数据
- php - password_get_info 返回意外结果
- hadoop - 从 Talend 连接到 Hadoop
- python-3.x - CNN精度y轴范围
- javascript - 类型错误:架构 [同步?'validateSync' : 'validate'] 不是函数