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

后端 未结 2 1900

Table:

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


        
2条回答
  •  遥遥无期
    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.

提交回复
热议问题