mysql 插入按日期分组的最大最小值

mysql insert max min value grouped by date

这是我的 table 架构:

mysql> describe stocks;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| symbol    | varchar(32) | NO   |     | NULL    |                |
| date      | datetime    | NO   |     | NULL    |                |
| value     | float(10,3) | NO   |     | NULL    |                |
| contracts | int(8)      | NO   |     | NULL    |                |
| open      | float(10,3) | NO   |     | NULL    |                |
| close     | float(10,3) | NO   |     | NULL    |                |
| high      | float(10,3) | NO   |     | NULL    |                |
| low       | float(10,3) | NO   |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
9 rows in set (0.00 sec)

我添加了两个名为 high 和 low 的新列,因此它们现在是空的。

我的目标是根据每天的时间用相对最大值、最小值填充这些列!

我的第一印象是这个查询:

select distinct DATE(date),max(value) as max,min(value) as min from stocks GROUP BY DATE(date);

...

| 2017-02-20 | 19130.000 | 18875.000 |
| 2017-02-21 | 19170.000 | 18780.000 |
| 2017-02-22 | 19125.000 | 18745.000 |
| 2017-02-23 | 18980.000 | 18765.000 |
| 2017-02-24 | 18840.000 | 18505.000 |
+------------+-----------+-----------+

实现了第一步,现在我应该将这些结果与每一行连接起来:

| 900363 | FIB7C  | 2017-02-20 17:49:44 | 18930.000 |         1 | 0.000 | 0.000 | 0.000 | 0.000 |

并根据 DATE(date) 插入正确的值,但我仍然不明白如何使用 INSERT INTO。 感谢您的帮助问候。

您可以使用 update 中的 join 以及聚合来计算值:

update stocks s join
       (select date(date) as d, max(value) as dhigh, min(value) as dlow
        from stocks s
        group by date(date)
       ) sd
       on date(s.date) = sd.d
    set s.high = sd.dhigh, 
        s.low = sd.dlow;