选择与组的MAX值对应的值

时间:2013-12-04 13:29:56

标签: mysql oxid

我正在尝试获取OXSEO表的OXSEOURL。

结构:
oxobjectid | oxseourl | oxparams

数据:
http://imageshack.com/a/img268/7443/3xr4.png
http://imageshack.com/a/img42/315/8bdu.png
我最深的SEO网址在OXPARAMS字段中总是具有更高的价值 只有数字值,其他值永远不会计数..

返回应该是:

http://imageshack.com/a/img29/8404/4jbv.png

我昨天找到了一个解决方案,但速度非常慢,现在我想尝试更快的方法 因此,我希望以最大oxparams值获得相同oxobjectid的oxseourl 我有超过330.000行,所以每个ms都算......

我只需选择盯着“tbproduct_”objectid的产品的网址。

我的查询:

SELECT seo2.oxseourl, seo2.oxobjectid, seo2.oxparams
FROM oxseo AS seo2
JOIN (
      SELECT oxobjectid, 
          MAX(oxparams) AS maxparam
      FROM    oxseo
      GROUP BY
          oxobjectid
     ) AS usm
     ON usm.maxparam = seo2.oxparams
WHERE seo2.oxobjectid LIKE '%tbproduct_%'
    AND seo2.oxparams REGEXP '^-?[0-9]+$'

但是这会返回产品的相同行。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

有点优化,速度更快:

SELECT seo.oxseourl, seo.oxobjectid, MAX(seo.oxparams)
FROM oxseo AS seo
WHERE seo.oxobjectid LIKE 'tbproduct_%' AND seo.oxparams REGEXP '^-?[0-9]+$'
GROUP BY seo.oxseourl, seo.oxobjectid