简体   繁体   中英

Column calculated by column with grouping

I have a simple table -

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

I would like to create a new column which calculates the minimum value per day per type. So giving the following results -

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

Is this possible? If so how would I go about it? I've been looking into triggers.

Thanks for any help.

Assuming that your table's name is mytable, try this:

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;
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

First create a field named min_day in your table. Then you can use JOIN in an UPDATE query.

Try this:

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

An example in SQL Fiddle .

EDIT:

For day-wise grouping:

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

Result in SQL Fiddle .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM