2017-04-06 8 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) 

私はオープンで低列を追加し、私は、テーブル内のデータでいっぱいにしたいです。

これらの値は、それぞれの日を基準にしています。(毎日の相対最大/最小IDは私に正しい値を与えるはずです)。だから私の最初の洞察力は、日付のリストを取得し、その後テーブルと結合を残している:

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

が、私は最大/最小IDまたは最後の/最初の値を取得することはできませんので、私はこだわっています。おかげ

答えて

1

あなたは、クエリ

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") 

以下から日賢明最小と最大のIDを取得します。しかし、他の要件が明確ではありません。

+0

これは、私がmin_id、max_idを 'value'カラムの値に置き換えて、カラムhigh、lowに挿入するのに必要な最初のステップです – 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 
関連する問題