トップ «前の日記(2017/06/08) 最新 次の日記(2017/06/10)» 編集

kaztomo日記


2017/06/09 PostgreSQLを勉強する

_ [SQL]為替データを SQLで取り込むべく、SQLを勉強ちう

テーブル構造は、先日作成したものをそのまま作成。

前提条件:

他プログラムからは hdata テーブルを用いたクエリを行う。
一方で為替データがどんどん更新されていくとして、そちらは hdata_new テーブルを用いる。
一定時間経過すると hdata_new の内容を hdata に対して上書きする。

  • CSVファイルから hdata テーブルへ取り込む
COPY hdata (Date, Time, Open, High, Low, Close)
FROM '/PathToCsv/2017.csv' DELIMITER ',' CSV;
  • 取り込んだ行数を確認
SELECT COUNT(*) FROM hdata;
  • 同じテーブル構造を持つ hdata_new との比較
    • hdata にあって、hdata_new に無いデータ内容の確認
SELECT date,time,open,high,low,close,volume FROM hdata
EXCEPT
SELECT date,time,open,high,low,close,volume FROM hdata_new;
    • hdata_new にあって、hdata に無いデータ内容の確認
SELECT date,time,open,high,low,close,volume FROM hdata_new
EXCEPT
SELECT date,time,open,high,low,close,volume FROM hdata;
  • date, time が同一で、中身(為替データ)が異なるデータ数を確認
SELECT count(*) FROM hdata, hdata_new
WHERE hdata.date = hdata_new.date
AND hdata.time = hdata_new.time
AND (not hdata.open = hdata_new.open OR not hdata.high = hdata_new.high...);
  • 該当するデータを hdata から削除
delete FROM hdata USING hdata_new
WHERE hdata.date = hdata_new.date
AND hdata.time = hdata_new.time AND not hdata.open = hdata_new.open;
  • hdata_new に有って、hdata に無いデータを追加
INSERT INTO hdata (date,time,open,high,low,close,volume)
SELECT date,time,open,high,low,close,volume FROM hdata_new
EXCEPT
SELECT date,time,open,high,low,close,volume from hdata;
  • 更新された結果を確認してみる
SELECT * FROM hdata ORDER BY date desc, time desc LIMIT 10;