桌子:
| id | productId | orderIndex | 拒绝| ------------------------------------------ | 1 | 1 | 0 | 1 | | 2 | 1 | 1 | 0 | | 3 | 1 | 2 | 0 | | 4 | 2 | 0 | 0 | | 5 | 2 | 1 | 1 | | 6 | 3 | 0 | 0 |
如何为每个productId选择一行,其最小orderIndex不被拒绝?
预期结果:
| id | productId | orderIndex | 拒绝| ------------------------------------------ | 2 | 1 | 1 | 0 | | 4 | 2 | 0 | 0 | | 6 | 3 | 0 | 0 |
我尝试了此查询,但未收到正确的结果:
SELECT id,productId,min(orderIndex) 从表 拒绝的地方= 0 按产品编号分组
这个也不起作用:
SELECT id,productId,min(orderIndex) 从 ( SELECT ID,ProductId,OrderIndex 从表 拒绝的地方= 0 )吨 按产品编号分组
您可以从选择不被拒绝的产品的最小orderIndex开始,如下所示:
SELECT productId, MIN(orderIndex)
FROM myTable
WHERE rejected = 0
GROUP BY productId;
一旦有了,就可以在productId和minOrderIndex匹配的条件下将其与原始表连接:
SELECT m.id, m.productId, m.orderIndex
FROM myTable m
JOIN(
SELECT productId, MIN(orderIndex) AS minOrderIndex
FROM myTable
WHERE rejected = 0
GROUP BY productId) tmp ON tmp.productId = m.productId AND tmp.minOrderIndex = m.orderIndex;
我的查询假设没有重复的(productId,orderIndex)对。只要那些不存在,就可以正常工作。这是一个SQL Fiddle示例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句