如何优化这个sql

时间:2015-08-11 10:06:51

标签: mysql sql optimization

一个模型由具有日期和相同验证码的记录分隔。 我想通过验证码选择和分组相同的记录并选择日期范围。我写了下一个sql,但他执行的是长...

SELECT
            (
                SELECT DATE 
                FROM user_day_status 
                WHERE VERIFICATION_TOKEN = uds.VERIFICATION_TOKEN 
                ORDER BY DATE ASC limit 1) 
                AS DATE_FROM,
            (
                SELECT DATE 
                FROM user_day_status 
                WHERE VERIFICATION_TOKEN = uds.VERIFICATION_TOKEN 
                ORDER BY DATE DESC limit 1) 
                AS DATE_TO,
        uds.USER_ID,uds.VERIFICATION_TOKEN,uds.DESCRIPTION
        FROM user_day_status uds 
        GROUP BY uds.VERIFICATION_TOKEN

3 个答案:

答案 0 :(得分:4)

这适合你吗?

SELECT MIN(uds1.DATE) AS DATE_FROM, MAX(uds1.DATE) AS DATE_TO, uds1.USER_ID,uds1.VERIFICATION_TOKEN,uds1.DESCRIPTION
FROM user_day_status uds1
JOIN  user_day_status uds2 ON uds1.VERIFICATION_TOKEN = uds2.VERIFICATION_TOKEN
GROUP BY uds1.VERIFICATION_TOKEN

答案 1 :(得分:1)

首先尝试:

class ImageProcessor {
public:
    jint _width;
    jint _height;
    int* _data;
    ImageProcessor()
    {
        _width = 0;
        _height = 0;
        _data = new int[0];
    }
}

并确保指数超过'DATE'。

答案 2 :(得分:1)

您根本不需要进行自我加入:

点击此处:

http://www.sqlfiddle.com/#!9/acf12/3

基本上:

SELECT MIN(uds1.DATE) AS DATE_FROM, 
       MAX(uds1.DATE) AS DATE_TO,
       uds1.USER_ID,
       uds1.VERIFICATION_TOKEN,
       uds1.DESCRIPTION
  FROM user_day_status uds1
 GROUP BY uds1.USER_ID,
          uds1.VERIFICATION_TOKEN,
          uds1.DESCRIPTION