SQL Select only rows with Minimum Value on a Column with Where Condition

后端 未结 2 1802

Table:

| id | productId | orderIndex | rejected |
------------------------------------------
| 1  |  1        |   0        |   1      |
| 2  |  1        |   1             


        
相关标签:
2条回答
  • 2021-01-12 02:53

    http://sqlfiddle.com/#!9/0196f/2

    SELECT DISTINCT t.*
    FROM table1 t
    INNER JOIN (
    SELECT productId, min(orderIndex) minIdx
    FROM table1
    WHERE rejected = 0
    GROUP BY productId
      ) t1
    ON t.productId = t1.productId
      AND t.orderIndex = t1.minIdx;
    
    0 讨论(0)
  • 2021-01-12 03:05

    You can start by selecting the minimum orderIndex of products that are not rejected like this:

    SELECT productId, MIN(orderIndex)
    FROM myTable
    WHERE rejected = 0
    GROUP BY productId;
    

    Once you have that, you can join it with your original table on the condition that productId and minOrderIndex match:

    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;
    

    My query makes the assumption that there are no duplicate (productId, orderIndex) pairs. As long as those don't exist, this will work just fine. Here is an SQL Fiddle example.

    0 讨论(0)
提交回复
热议问题