2017-04-06 95 views
0

这是我的架构:MySQL的加入与子查询

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.03 sec) 

我加列开低,我想用表里面的数据来填充。

这些值打开/关闭是每天参考的。(所以每天的相对最大/最小值应该给我正确的值)。所以我的第一个观点是获取日期的列表,然后离开携手同台:

SELECT DISTINCT(DATE(date)) as date FROM stocks 

,但我坚持,因为我不能得到的最大/最小ID或第一/最后一个值。由于

回答

1

您将获得一天明智的最小值和最大值IDS从下面查询

SELECT DATE_FORMAT(date, "%d/%m/%Y"),min(id) as min_id,max(id) as max_id FROM stocks group by DATE_FORMAT(date, "%d/%m/%Y") 

但是其他的要求是不明确的。

+0

感谢您的帮助,这是我需要用'value'列的值替换min_id,max_id然后插入列高,低的第一步 – egariM

0

解决!

mysql> UPDATE stocks s JOIN 
    -> (SELECT k.date, k.value as v1, y.value as v2 FROM (SELECT x.date, x.min_id, x.max_id, stocks.value FROM (SELECT DATE(date) as date,min(id) as min_id,max(id) as max_id FROM stocks group by DATE(date)) AS x LEFT JOIN stocks ON x.min_id = stocks.id) AS k LEFT JOIN stocks y ON k.max_id = y.id) sd 
    -> ON DATE(s.date) = sd.date 
    -> SET s.open = sd.v1, s.close = sd.v2; 
Query OK, 995872 rows affected (1 min 50.38 sec) 
Rows matched: 995872 Changed: 995872 Warnings: 0