:
SELECT Product, Tier1, Tier2, Tier3
FROM (
SELECT Product, Tier1, Tier2, Tier3,
@rn := IF(@p = Product, @rn + 1,
IF(@p := Product, 1, 1)) AS rn
FROM mytable
CROSS JOIN (SELECT @rn := 0, @p = '') AS vars
ORDER BY
Product,
IF(Tier3 = '-', 1, 0),
IF(Tier2 = '-', 1, 0),
IF(Tier1 = '-', 1, 0)) AS t
WHERE t.rn = 1
ORDER BY , , .
, . @rn - 1 Product. @rn reset 1, .
Note. You can change the conditions Tierx = '-'to Tierx IS NULLif NULLused to indicate an empty level instead '-'.
Demo here
source
share