データベースの構造を確認
為替データ(forex_prices
)の最新価格を取得
SELECT
currency_pair,
date,
open / 100.0 AS open,
high / 100.0 AS high,
low / 100.0 AS low,
close / 100.0 AS close,
adjusted_close / 100.0 AS adjusted_close,
volume
FROM
forex_prices
WHERE
date = (SELECT MAX(date) FROM forex_prices)
ORDER BY
currency_pair;
株式指数データ(indices_prices
)の最新価格を取得
SELECT
index_name,
date,
open / 100.0 AS open,
high / 100.0 AS high,
low / 100.0 AS low,
close / 100.0 AS close,
adjusted_close / 100.0 AS adjusted_close,
volume
FROM
indices_prices
WHERE
date = (SELECT MAX(date) FROM indices_prices)
ORDER BY
index_name;
商品データ(commodities_prices
)の最新価格を取得
SELECT
commodity_name,
date,
open / 100.0 AS open,
high / 100.0 AS high,
low / 100.0 AS low,
close / 100.0 AS close,
adjusted_close / 100.0 AS adjusted_close,
volume
FROM
commodities_prices
WHERE
date = (SELECT MAX(date) FROM commodities_prices)
ORDER BY
commodity_name;
債券・金利データ(bonds_rates
)の最新値を取得
SELECT
bond_name,
date,
value / 100.0 AS value
FROM
bonds_rates
WHERE
date = (SELECT MAX(date) FROM bonds_rates)
ORDER BY
bond_name;
ボラティリティ指数データ(volatility_indices
)の最新値を取得
SELECT
index_name,
date,
value / 100.0 AS value
FROM
volatility_indices
WHERE
date = (SELECT MAX(date) FROM volatility_indices)
ORDER BY
index_name;
仮想通貨データ(crypto_prices
)の最新価格を取得
SELECT
crypto_name,
date,
open / 100.0 AS open,
high / 100.0 AS high,
low / 100.0 AS low,
close / 100.0 AS close,
adjusted_close / 100.0 AS adjusted_close,
volume
FROM
crypto_prices
WHERE
date = (SELECT MAX(date) FROM crypto_prices)
ORDER BY
crypto_name;
クエリの説明
SELECT
句:- 資産名(
currency_pair
,index_name
,commodity_name
,bond_name
,crypto_name
)と最新の価格データを取得します。 - 価格データは、保存時に100倍されて整数として保存されているため、
/ 100.0
で割り、小数点以下二桁の値に戻しています。
- 資産名(
WHERE
句:date = (SELECT MAX(date) FROM テーブル名)
を使用して、各テーブルの最新の日付のデータのみを取得しています。
ORDER BY
句:- 資産名でソートして、結果を見やすくしています。
全銘柄の最新価格を一度に取得する方法
全てのテーブルの最新データを一つのクエリで取得することはSQLiteでは直接できませんが、各テーブルから取得したデータをUNION ALLで結合することで、一つの結果セットとして表示することが可能です。
以下は、為替データ、株式指数データ、商品データ、仮想通貨データをまとめて取得する例です。
SELECT
'Forex' AS asset_type,
currency_pair AS asset_name,
date,
open / 100.0 AS open,
high / 100.0 AS high,
low / 100.0 AS low,
close / 100.0 AS close,
adjusted_close / 100.0 AS adjusted_close,
volume
FROM
forex_prices
WHERE
date = (SELECT MAX(date) FROM forex_prices)
UNION ALL
SELECT
'Index' AS asset_type,
index_name AS asset_name,
date,
open / 100.0,
high / 100.0,
low / 100.0,
close / 100.0,
adjusted_close / 100.0,
volume
FROM
indices_prices
WHERE
date = (SELECT MAX(date) FROM indices_prices)
UNION ALL
SELECT
'Commodity' AS asset_type,
commodity_name AS asset_name,
date,
open / 100.0,
high / 100.0,
low / 100.0,
close / 100.0,
adjusted_close / 100.0,
volume
FROM
commodities_prices
WHERE
date = (SELECT MAX(date) FROM commodities_prices)
UNION ALL
SELECT
'Crypto' AS asset_type,
crypto_name AS asset_name,
date,
open / 100.0,
high / 100.0,
low / 100.0,
close / 100.0,
adjusted_close / 100.0,
volume
FROM
crypto_prices
WHERE
date = (SELECT MAX(date) FROM crypto_prices)
ORDER BY
asset_type,
asset_name;
クエリの説明
UNION ALL
を使用して、各テーブルから取得したデータを結合しています。asset_type
カラムを追加して、資産の種類を識別しています。- カラム名の統一:各テーブルで資産名のカラム名が異なるため、エイリアスを使用して統一しています(
asset_name
)。 - 価格の変換:保存時に100倍された価格を元に戻しています。
債券・金利データとボラティリティ指数データの追加
上記のクエリに、債券・金利データとボラティリティ指数データを含めることも可能です。
-- 前のクエリに続けて
UNION ALL
SELECT
'Bond/Rate' AS asset_type,
bond_name AS asset_name,
date,
NULL AS open,
NULL AS high,
NULL AS low,
value / 100.0 AS close,
NULL AS adjusted_close,
NULL AS volume
FROM
bonds_rates
WHERE
date = (SELECT MAX(date) FROM bonds_rates)
UNION ALL
SELECT
'Volatility Index' AS asset_type,
index_name AS asset_name,
date,
NULL AS open,
NULL AS high,
NULL AS low,
value / 100.0 AS close,
NULL AS adjusted_close,
NULL AS volume
FROM
volatility_indices
WHERE
date = (SELECT MAX(date) FROM volatility_indices)
ORDER BY
asset_type,
asset_name;