这是我的桌子
prefix | rate | provider
------------------------
21366 | 0.1951 | ES
213 | 0.0554 | ES
213 | 0.0567 | 3LV
2136 | 0.189 | 3LV
213 | 0.0481 | vbP
21366 | 0.1894 | vbP
44 | 0.05 | ES
44 | 0.004 | vbP如何在所有提供程序之间选择前缀长度最大的前缀X的最低速率。
例如,对于这个前缀21366,结果集应该如下所示
2136 | 0.189 | 3LV - The Winner
21366 | 0.1894 | vbP
21366 | 0.1951 | ES如果提供程序具有确切的前缀21366,那么它将是将与其他提供程序的速率进行比较的行。如果提供程序没有确切的前缀,那么我们将尝试在想要的前缀和提供者的前缀之间找到最长的公共字符串。
我使用此条件匹配前缀WHERE 21366 LIKE CONCAT(前缀, '%' )。
因此,首先,查找每个提供者的前缀。然后选择提供者之间的最低速率。
发布于 2014-01-20 23:22:31
此查询应返回所需的行:
SELECT tablename.*
FROM
tablename INNER JOIN (
SELECT
provider, MAX(LENGTH(prefix)) as max_length
FROM
tablename
WHERE
'21366' LIKE CONCAT(prefix, '%')
GROUP BY
provider) m
ON tablename.provider = m.provider
AND LENGTH(prefix)=m.max_length请看小提琴这里。您还可能希望将此添加到查询中:
ORDER BY
rate
LIMIT 1如果你只需要最低的利率。
https://stackoverflow.com/questions/21246055
复制相似问题