使用Group-Function优化MySQL查询,使用Join优化两个不同的时间戳

时间:2017-01-25 07:31:11

标签: mysql group-by

我有不同的表格,包括温度值和时间戳。我用这个查询加入这些表:

SELECT UNIX_TIMESTAMP(l.TimeDate) time
     , AVG(l.intemp)
     , AVG(n.intemp)
     , DATE_FORMAT(l.TimeDate, '%Y-%m-%d-%H') dates 
  FROM values.temps l 
  LEFT 
  JOIN values.net n
    ON DATE_FORMAT(l.TimeDate, '%Y-%m-%d-%H') = DATE_FORMAT(n.TimeDate, '%Y-%m-%d-%H') 
 WHERE YEARWEEK('2017-01-17 00:00:00',1) = YEARWEEK(l.TimeDate,1) 
 GROUP 
    BY dates 
 ORDER 
    BY dates ASC

这个查询有点慢,但它有效,并给我1周的值。那么我该如何优化呢?

1 个答案:

答案 0 :(得分:0)

我没有回复,因为实际上我正在努力思考如何用范围查询来表达你的YEARWEEK条件。

我认为这样的事情会起作用,但它拒绝使用'范围'。

SELECT * 
  FROM my_table 
 WHERE dt BETWEEN CONCAT(STR_TO_DATE(CONCAT(YEARWEEK('2017-01-25'), ' Monday'), '%x%v %W'), ' 00:00:00') 
              AND CONCAT(STR_TO_DATE(CONCAT(YEARWEEK('2017-01-25'), ' Sunday'), '%x%v %W'), ' 23:59:59')

也许其他人可以发现我的男生错误。

+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table    | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | my_table | ALL  | dt            | NULL | NULL    | NULL |  100 | Using where |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+