按列分组计算的列

时间:2014-05-14 09:57:59

标签: mysql sql

我有一个简单的表 -

id | date | type | value
-------------------------
1   1/1/14   A      1
2   1/1/14   A      10
3   2/1/14   A      10
4   2/1/14   A      15
5   2/1/14   B      15
6   2/1/14   B      20

我想创建一个新列,用于计算每种类型每天的最小值。所以给出以下结果 -

id | date | type | value | min_day
-----------------------------------
1   1/1/14   A      1        1
2   1/1/14   A      10       1
3   2/1/14   A      10       10
4   2/1/14   A      15       10 
5   2/1/14   B      15       15
6   2/1/14   B      20       15

这可能吗?如果是这样我怎么去呢?我一直在研究触发器。

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

假设您的表名是mytable,请尝试:

SELECT mt.id,
  mt.date,
  mt.type,
  mt.value,
  mt.min_day,
  md.min_value
FROM mytable mt
LEFT JOIN
  (SELECT date, MIN(value) min_value FROM mytable GROUP BY DATE
  ) md
ON mt.date=md.date;

答案 1 :(得分:0)

SELECT t1.*,
       t2.min_day
FROM Table1 AS t1
JOIN
  (SELECT date,TYPE,
               min(value) AS min_day
   FROM table1
   GROUP BY date,TYPE) AS t2 ON t1.TYPE = t2.TYPE
AND t1.date = t2.date

答案 2 :(得分:0)

首先在表格中创建一个名为min_day的字段。然后,您可以在JOIN查询中使用UPDATE

试试这个:

UPDATE TableName T1  JOIN
   (SELECT date,type,MIN(value) as MinValue
   FROM TableName
   GROUP BY type,date) T2 ON T1.type=T2.type AND T1.date=T2.date
SET T1.min_day = T2.MinValue

SQL Fiddle中的示例。

修改

对于日间分组:

UPDATE TableName T1 JOIN
  (SELECT MONTH(date) as mon,type,MIN(value) as MinValue
  FROM TableName
  GROUP BY type,MONTH(date)) T2 ON T1.type=T2.type AND MONTH(T1.date)=T2.mon
SET T1.min_day = T2.MinValue

结果为SQL Fiddle