获取按特定日期分类的列的平均值

Get average of a column classified on specific dates

我有一个 table 格式如下:
日期时间 温度1 湿度1

其中记录(日期时间)的间隔为 2 小时。
我想获得每周的最小值、平均值和最大值。 我可以想象在 12 个月内制作以下 view

SELECT 1 AS month, min(t1) AS mn, avg(t1) AS av, max(t1) AS mx
  FROM TandRH WHERE DATE(dt) LIKE '2014-01%' UNION
SELECT 2 AS month, min(t1) AS mn, avg(t1) AS av, max(t1) AS mx
  FROM TandRH WHERE DATE(dt) LIKE '2014-02%' UNION
SELECT 3 AS month, min(t1) AS mn, avg(t1) AS av, max(t1) AS mx
  FROM TandRH WHERE DATE(dt) LIKE '2014-03%' UNION
SELECT 4 AS month, min(t1) AS mn, avg(t1) AS av, max(t1) AS mx
  FROM TandRH WHERE DATE(dt) LIKE '2014-04%' UNION
SELECT 5 AS month, min(t1) AS mn, avg(t1) AS av, max(t1) AS mx
  FROM TandRH WHERE DATE(dt) LIKE '2014-05%' UNION
SELECT 6 AS month, min(t1) AS mn, avg(t1) AS av, max(t1) AS mx
  FROM TandRH WHERE DATE(dt) LIKE '2014-06%' UNION
SELECT 7 AS month, min(t1) AS mn, avg(t1) AS av, max(t1) AS mx
  FROM TandRH WHERE DATE(dt) LIKE '2014-07%' UNION
SELECT 8 AS month, min(t1) AS mn, avg(t1) AS av, max(t1) AS mx
  FROM TandRH WHERE DATE(dt) LIKE '2014-08%' UNION
SELECT 9 AS month, min(t1) AS mn, avg(t1) AS av, max(t1) AS mx
  FROM TandRH WHERE DATE(dt) LIKE '2014-09%' UNION
SELECT 10 AS month, min(t1) AS mn, avg(t1) AS av, max(t1) AS mx
  FROM TandRH WHERE DATE(dt) LIKE '2014-10%' UNION
SELECT 11 AS month, min(t1) AS mn, avg(t1) AS av, max(t1) AS mx
  FROM TandRH WHERE DATE(dt) LIKE '2014-11%' UNION
SELECT 12 AS month, min(t1) AS mn, avg(t1) AS av, max(t1) AS mx
  FROM TandRH WHERE DATE(dt) LIKE '2014-12%'

1。我怎样才能做到52周?
2. 12个月有没有更聪明的解决方案?
3. 我也考虑过制作一个新的 table 并每周更新一次,但这两次存储相同的数据。

谢谢

您有关于周和月的问题。我会回答几个月。你想使用 group by:

SELECT month(date) as month, min(t1) AS mn, avg(t1) AS av, max(t1) AS mx
FROM TandRH 
WHERE year(date) = 2014
GROUP BY month(date);

你会在一周内做类似的事情,使用 weekofyear() 而不是 month()