mysql - Mysql group by 具有不同的和内部连接
问题描述
两个实体:
- 运输
- 货件编号 (PK)
- ShipmentTypeId
- 状态标识
- EstArrivalDate
- 装运项目
- 货件编号
- ShipmentItemSeqId
- 产品编号
- 数量
我已经创建了一个带有 shippingId 的连接(内部连接),并且希望对于每个不同的 productId,Mysql 应该只返回一行。
我想找到不同的产品,并且只找到每种产品的第一条记录
SELECT DISTINCT(SI.PRODUCT_ID), S.ESTIMATED_ARRIVAL_DATE, SI.QUANTITY AS SUM_QTY
FROM SHIPMENT S INNER JOIN
SHIPMENT_ITEM SI
ON S.SHIPMENT_ID = SI.SHIPMENT_ID AND
S.SHIPMENT_TYPE_ID = 'PURCHASE_SHIPMENT' AND
S.STATUS_ID = 'PURCH_SHIP_CREATED' AND
S.ESTIMATED_ARRIVAL_DATE > NOW()
GROUP BY SI.PRODUCT_ID, S.ESTIMATED_ARRIVAL_DATE, SI.QUANTITY
HAVING SI.QUANTITY > 0;
请帮助我,因为这不起作用。
解决方案
如果您运行的是 MySQL 8.0,则可以使用窗口函数解决此问题:
select *
from (
select si.product_id, s.estimated_arrival_date, si.quantity as sum_qty,
row_number() over(partition by si.product_id order by s.estimated_arrival_date) rn
from shipment s
inner join shipment_item si on s.shipment_id = si.shipment_id
where
s.shipment_type_id = 'purchase_shipment'
and s.status_id = 'purch_ship_created'
and s.estimated_arrival_date > now()
) t
where rn = 1
推荐阅读
- java - Android,如何从片段中获取活动状态
- excel - 计算vba宏中某一列中某个文本的数量
- javascript - NestJS 无法解决服务 mongodb 的依赖关系
- python - 在python中测量两个rgb图像之间的相似度
- sql - 使用 select 更新 xml 中的文本值
- bash - 在巨大的文本文件中显示一系列行的最简单方法?不需要编辑
- dijkstra - 为什么这个 Dijkstra 代码正确(节点处理)?
- javascript - 将元素放入 Svelte 组件中
- c# - Microsoft Graph API - 无法访问单个消息(例外)
- scala - 评估 Scala 工作表中的表达式