我正在努力解决这个棘手的问题。 我有一个类似于以下的mysql表:
Category Model Description
cat1 AAA Triple A
cat1/cat2 AAA Triple A
cat1/cat2 BBB Triple B
cat1 BBB Triple B
cat3 CCC Triple C
cat3/cat4/cat5 CCC Triple C
cat3/cat4 CCC Triple C
等
我想选择具有唯一模型和“最长”类别的行。基本上我想获得:
Category Model Description
cat1/cat2 AAA Triple A
cat1/cat2 BBB Triple B
cat3/cat4/cat5 CCC Triple C
任何提示?
答案 0 :(得分:4)
select m.*
from MyTable m
inner join (
select Model, max(char_length(Category)) as MaxLen
from MyTable
group by Model
) mm on m.Model = mm.Model and char_length(m.Category) = mm.MaxLen
事实上,您可能想要最深的类别而不是最长的类别。如果是这种情况,那么有比上面更好的选择。
答案 1 :(得分:3)
根据您提供的数据,以下内容将起作用:
select max(category), Model, Description
from t
group by Model, Description
这是因为“cat1”< “cat1 / cat2”等等。
答案 2 :(得分:1)
如果“longuest”表示类别中/
的最大数量(应该是),请尝试以下操作:
SELECT
t.Category
, t.Model
, t.Description
FROM
t
INNER JOIN
(
SELECT
Model
, MAX(CHAR_LENGTH(Category) - CHAR_LENGTH(REPLACE(Category, '/', ''))) AS Depth
FROM
t
GROUP BY
Model
) AS tmax
ON t.Model = tmax.Model
AND CHAR_LENGTH(t.Category) - CHAR_LENGTH(REPLACE(t.Category, '/', '')) = tmax.Depth
此外,它似乎有效:http://sqlfiddle.com/#!2/725e5/3/0