- PR -

SQLで取得できますか?

投稿者投稿内容
FX
常連さん
会議室デビュー日: 2004/12/06
投稿数: 49
投稿日時: 2005-04-19 10:08
こんにちは、みなさん。
5分間隔の株価のテーブルがあります。これを日にち単位にして取得したいのですが、SQLだけで取得する方法が思いつきません。
株価TBL
日付   時刻 始値 高値 安値 終値 出来高
20050401 0900 1200 1230 1190 1210   56
20050401 0905 1210 1240 1150 1190   70
20050401 0910 1190 1230 1190 1210   55
20050401 0915 1210 1250 1170 1230   45
20050402 0900 1130 1150 1100 1140   30
20050402 0905 1140 1140 1100 1110   25
20050402 0910 1110 1110 1060 1060   55
20050402 0915 1060 1080 1060 1060   80


このデータから以下のように出力したいのです。
日付   始値 高値 安値 終値 出来高
20050401 1200 1250 1150 1230   226
20050402 1130 1160 1110 1060   190

始値はその日付の始値列の一番小さい時刻の値
高値はその日付の高値列の一番高い値
安値はその日付の安値列の一番低い値
終値はその日付の終値列の一番大きい時刻の値
出来高は日付単位の合計値

select 日付,max(高値),min(安値),sum(出来高) from 株価TBL
group by 日付
で日付、高値、安値、出来高は取得できるのですが、始値と終値の取得方法が分かりません。

ご教授のほどお願いします。
NAO
ぬし
会議室デビュー日: 2001/10/24
投稿数: 1256
お住まい・勤務地: 神奈川のはずれから東京の下町
投稿日時: 2005-04-19 10:30
お早うございます。

SQLで困っています
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19846&forum=26

で、質問に回答したと思いますが、最後に

引用:

ありがとうございます。
こちらのサイトのSQL講座の記事を読んで勉強します。



と書かれていますが、その後自分で勉強はされたんですか?
今回の質問の内容はざっくりとしか読んでいませんが、
勉強して、試行錯誤すればそれなりに自分で解決できる内容では無いのでしょうか?

※当然SQLだけでは無く、使っているDBの関数とかも勉強は必要ですよ

SQLを質問される方へのアドバイス
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18502&forum=26

で私が書いていますが、自分の席にDBをインストールして
簡単にテーブルを作って、それに対してSQLを発行してみれば
わかる話では無いのですか?

_________________
Inspired Ambitious

[ メッセージ編集済み 編集者: NAO 編集日時 2005-04-19 10:31 ]
FX
常連さん
会議室デビュー日: 2004/12/06
投稿数: 49
投稿日時: 2005-04-19 10:58
NAOさん返答ありがとうございます。
その後、当サイトの相関サブクエリーを読んでみましたが、今回のクエリーが相関サブクエリーで作る方法が思いつきませんでしたので、投稿させてもらいました。
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-04-19 11:04
ちょっくら整理してみましょうか?

引用:

始値はその日付の始値列の一番小さい時刻の値
高値はその日付の高値列の一番高い値
安値はその日付の安値列の一番低い値
終値はその日付の終値列の一番大きい時刻の値
出来高は日付単位の合計値


これで高値、安値、出来高は日付単位でグループ化して、集計関数使えばいいって
解ったんですよね?

ではまず始値のみを求めるSQL文ってどう書けばいいか
お解りになりますか?
(ある列(時刻)の最小値を持つレコードを取得するって事です。)

#一応の確認ですが…
#始値、終値は日付ごとで一番小さい/大きい値の時刻を持つ
#レコードの始値、終値のことですよね?
#「始値はその日付の始値列の一番小さい時刻の値」
#がよく理解できなかったので。

#日本語修正(滝汗

[ メッセージ編集済み 編集者: 夏椰 編集日時 2005-04-19 11:35 ]
FX
常連さん
会議室デビュー日: 2004/12/06
投稿数: 49
投稿日時: 2005-04-19 11:41
こんにちは、夏椰さん
レスありがとうございます。

始値と終値の求め方が良く分かりません。
その日毎の時刻の一番小さい値の始値を取得したいのである日にちだけを限定してしまえば以下のようにすれば取れるでしょうか(自分で書いていて恥ずかしいですが・・・)

select top 1 始値 from 株価TBL
where 日付 = '20050401'
order by 時刻
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-04-19 11:44
引用:

FXさんの書き込み (2005-04-19 11:41) より:

始値と終値の求め方が良く分かりません。
その日毎の時刻の一番小さい値の始値を取得したいのである日にちだけを限定してしまえば以下のようにすれば取れるでしょうか(自分で書いていて恥ずかしいですが・・・)


そうですか。
ここで前回の書き込みで教わった相関サブクエリーを使えばいいんですよ。(^^)

↓ちゃんと試していないけど、こんな感じになると思います。
------------------------------------------------------------
SELECT
日付,
始値
FROM
株価TBL A
WHERE
時刻 =
( SELECT
MIN(時刻)
FROM
株価TBL B
WHERE
B.日付 = A.日付
)
------------------------------------------------------------

で、始値の求め方がわかったら、終値に変更してみて、
それらを1つのSQLとして合体させてみましょう。(^^)

[ メッセージ編集済み 編集者: 夏椰 編集日時 2005-04-19 11:46 ]
NAO
ぬし
会議室デビュー日: 2001/10/24
投稿数: 1256
お住まい・勤務地: 神奈川のはずれから東京の下町
投稿日時: 2005-04-19 11:57
引用:

FXさんの書き込み (2005-04-19 10:58) より:
NAOさん返答ありがとうございます。
その後、当サイトの相関サブクエリーを読んでみましたが、今回のクエリーが相関サブクエリーで作る方法が思いつきませんでしたので、投稿させてもらいました。



@ITに相関サブクエリーが載っているかどうかではありません。
そういった事も含めてSQLをきちんと勉強して下さいって事です。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-04-19 13:13
Googleの検索結果
該当する@ITの相関サブクエリーのページ

これで引っかかって、
相関クエリーをはなんぞやって理解できると思いますが・・・?
本当に調べました・・・?

調べ方がわからなければ
「調べ方がわかりません」
と聞くのが順当かと思いますが・・・??

尚、@ITのページは、Googleの検索結果第一番でした。

スキルアップ/キャリアアップ(JOB@IT)