Mysql group by 具有不同的和内部连接
Posted
技术标签:
【中文标题】Mysql group by 具有不同的和内部连接【英文标题】:Mysql group by with distinct and inner join 【发布时间】:2021-02-14 23:52:48 【问题描述】:两个实体:
-
发货
-
ShipmentItem
我已经创建了一个带有 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;
请帮帮我,因为这不起作用。
【问题讨论】:
请提供样本数据和期望的结果。我不完全理解您所说的“仅每种产品的第一条记录”是什么意思。 【参考方案1】:如果你运行的是 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
【讨论】:
以上是关于Mysql group by 具有不同的和内部连接的主要内容,如果未能解决你的问题,请参考以下文章