物凄い勢いで誰かが質問に答えるスッドレ

このエントリーをはてなブックマークに追加
896NAME IS NULL:2005/05/10(火) 19:27:18 ID:pUjImQmO
MS Accessで改行コードを意図したものじゃない場合の旨いやり方は有りますでしょうか。

UNIXで作成した改行コード\nで作成したファイルを
WinxpのAccessでopenステータスを利用して読み込もうとしたのですが、
inputしたデータの改行部が無視されて次の行の分まで含まれていた為
読み込む前に\nを\r\nに変換してしまうか、読込み方法を変更したいのです。
897NAME IS NULL:2005/05/12(木) 03:17:05 ID:???
>>896
VBAのお話ですね。というわけで、板違い。
ftpで転送するときに改行コードの変換をしてみるとか
898NAME IS NULL:2005/05/12(木) 23:00:37 ID:oWFiCYu4
株価を研究するのにずっとエクセルを使ってきたのですが、
もっと多くのデータを扱いたいと重いデータベースの導入を考えています。
そこでデータベースの設計について質問があります。

データベースに記録したい内容は、始値 高値 安値 終値・・・などで、
これらのデータを、「銘柄数分」「毎日」記録したいと思っています。
もし、日付をテーブルにしたら(毎日テーブルを新規に作る)、データを利用するときは銘柄ごとに時系列で
追うことが多いので、テーブル間の串刺しが大量におこってしまいます。
また、もし、銘柄ごとにテーブルを作ると、テーブル数が膨大(4000銘柄くらい扱いたい)
になってしまいます。

こういった場合、どのように設計するのがいいのでしょうか?
分かりにくい表現があるかと思いますが、よろしくお願いします。
899NAME IS NULL:2005/05/12(木) 23:17:29 ID:???
ええっと、なにから説明したらよいのかな...

銘柄テーブルと株価データテーブルをつくって、
株価テーブルには日付カラムと銘柄IDを格納すればよい。

うーんだめだ、噛み砕いて説明できないな。


ところで、株価研究って自前のツールとか、データベースを
使ってやることが一般的なの? よくそういう話を聞くけど。
900NAME IS NULL:2005/05/12(木) 23:46:53 ID:H58fxviT
>>898 銘柄テーブル(
銘柄ID,銘柄名
)

株価テーブル(
銘柄ID,日付,高値,安値,始値,終値
(銘柄ID,日付)はprimary key
)

901898:2005/05/13(金) 00:28:43 ID:W8Hpy/5x
>>899
>>900
はやいレス、ありがとうございます。

すみません、私の説明が足りてませんでした。
銘柄名は保存しないつもりです。
株には銘柄ごとに固有の銘柄コードがあるので、それを使うつもりです。
(900さんのおっしゃる、一般で通じる銘柄IDみたいなものです)
というわけで、ちょうど

株価テーブル(
銘柄ID,日付,高値,安値,始値,終値
(銘柄ID,日付)はprimary key
)

のところが保存したい部分です。
そして、私が悩んでいるのはこのようにテーブルを設計すると、
データ取得のときにロスが大きくなってしまうのではないのか、ということです。
エクセル的な発想なのですが、1テーブル1銘柄にすれば、多くの場合のデータ取得は
1つの銘柄に対して連続した日のデータを取得するものなので、効率的かな、と思ったのです。
エクセルだとシートごとに銘柄を分けて、1行1日としてデータを記述しておけば、
データのメンテナンスや計算時に楽だったのでそう考えてみました。

できれば複数銘柄を1つのテーブルに入れたくないのですが、この発想自体がデータベース
的ではないのでしょうか?


>>899
そこそこいるとは思います。
近年多くなったデイトレーダーや業績重視で買って長期で持つ人はこういうことはしないでしょうが、
1週間〜2,3ヶ月単位で取引してる人は、こういうことしている人も多いと思います。
902NAME IS NULL:2005/05/13(金) 00:47:00 ID:???
>>901
4000銘柄でも年間100万行ぐらいだろ。
Accessでやるなら数年で糞重くなりそうだが、
他のDBMSなら大丈夫でしょ。
あと、銘柄テーブルも作っておいたほうが、後々便利だろうね。
903NAME IS NULL:2005/05/13(金) 01:18:52 ID:???
>>901 同じようなものはおなじテーブルに突っ込むのがDB的。
902の人も言ってるけど、数百万件程度なら問題ない。
904NAME IS NULL:2005/05/13(金) 01:40:41 ID:???
どうしても分割したければ、年毎に分割すればいいんじゃないかな。
905NAME IS NULL:2005/05/13(金) 02:19:42 ID:???
株価分析のプログラムは昔作ったことがあるけど、
条件を変えてバッチ処理を繰り返し流すイメージなんだよね。
DBに格納しようがCSVなどのシーケンシャルファイルに入ってようが
やることは一緒で端から読んで1件ずつ処理してゆくことになる。
SQLデータベース的な集計手法は役に立たない。
EXCELのBOOKだけで足りなくなったら、年度や月度ごとにBOOKを作って
複数のファイルから串刺しで集計するバッチプログラムを作るのが現実的。
906NAME IS NULL:2005/05/13(金) 02:25:23 ID:???
Lotus 1-2-3で処理しきれなくなっていきなりOracle買ってきて
使い方がわからないと泣き付いてきた自称投資家を思い出した。
OracleはおっきいLotusじゃないんだぞと説教したよ。
907902:2005/05/13(金) 03:33:26 ID:???
>>905
> SQLデータベース的な集計手法は役に立たない。

どう役に立たないのだろう。
年度毎や月間毎に別ける必要もなく、わざわざ串刺しする必要性もない。
Book管理やファイル管理も省ける。

DB側で集計しなくても、ある銘柄をある期間分抽出してホストプログラムへ
渡せばいいわけだし、あと、元質のところには無いが、出来高も加えて
その集計をDBに任せたりすると、期間別出来高変動なんかも、
1行のSQLでデータは取り出せる。

銘柄テーブルを作って、そこに鉄鋼株とか自動車株などのカテゴリーや
トヨタ自動車グループとかフジサンケイグループなどの企業グループを
識別するカラムを追加して、カテゴリー単位や企業グループ単位の
トレンドライン(?)を出したりするときも、1行のSQLで抽出できる。

って、株も株価分析もやったことないので的外れなことだったらスマソ。
個人が4000銘柄を管理したいと言うことは、多角的に株価を眺めたいん
だろうなと思って、MVCのMの部分が1行のSQLで済ませるのなら楽だと
思ったまでだ。
908NAME IS NULL:2005/05/13(金) 20:29:45 ID:ZTGzA6Xp
Postgresの
psql < DB名 〜.sql
はmySQLではどのようにやればよいのでしょうか。

ご教示いただけますと幸いです。
909898:2005/05/13(金) 22:30:45 ID:W8Hpy/5x
おお、さすがものすごい勢い〜スッドレですね。
みなさん、レスありがとうございます。

>>902
>>903
>>906
どうやら私はデータベースというものを甘く見すぎてたみたいです。
私はDBとはエクセルの親分みたいなものだと想像してたのですが(Accessの入門本で住所録とかが多いものですから…)、
数百万間程度なら問題ない、っていうレスを見て驚愕しました。
そんなに大量のデータでも1テーブルで処理できるんですね。
って書いてて思ったんですが、エクセルだと1ブック開くごとに
メモリ上にセル内容をロードしてるから限界があるけど、
DBだとそうしないので、1テーブルで相当数が入るわけですね。

>>904
実際に運用するようになったらそうしてみます。
そのほうがバックアップとかも楽そうですしね

>>905
>>907
これは結構悩みどころですね。
たしかにDBを使わなければ今のスキルで何とかなりそうですが、
DBを導入するとなれば、相当の勉強を覚悟しないとだめですよね。
ブック分散も考えたのですが、興味もあるのでどうせならこの際、
DBの勉強もしようかなと今のところ思っています。
とりあえず少し勉強して、実際SQLでどういったことができるのか(SELECTとかしか知らないorz)、
を知ってみたいです。
4000銘柄(ちなみに今は500銘柄監視くらいです)も管理する理由ですが、多角的に眺めるというより売買チャンスを増やすのが目的です。
それなら全銘柄監視すればいい、ということになるんですが、ある程度の流動性がある株でないと、
買ったはいいが売るに売れない状況(自分が売ることによって株が値下がりしてしまう)になってしまうのです。
なのでそういったことを考慮すると、日本市場だと4000銘柄くらいが分析対象になるかなと思っています。
そしてそれらの銘柄の中で「売られすぎ・買われすぎ」なものを抽出して、売買するって感じですね。

910NAME IS NULL:2005/05/14(土) 18:17:16 ID:8uuv/+F5
こんにちは!
postgreSQLのpg_shadowの内容を全部消したら、
postgresスーパーユーザーですらDBにアクセス
出来なくなりました!
修復方法などありますでしょうか?
911NAME IS NULL:2005/05/16(月) 14:55:48 ID:???
MySQLです。
物凄い初心者で申し訳ないんですが、
tableAとtableBがあってその二つにはnameレコード(プラキー)がある。
その中から「ぴよゆき」のフィールドを検索するには、
SELECT tableA.name,tableB.name FROM tableA,tableB
WHERE tableA.name=tableB.name AND tableA.name="ぴよゆき"
これでダメなんですが、どうしたらいいでしょうか?
912NAME IS NULL:2005/05/16(月) 15:01:02 ID:???
>>911
漢字以外でもだめか?
913NAME IS NULL:2005/05/16(月) 15:01:34 ID:???
漢字つーか、全角。
アルファベットでやってもだめなのかどうか
914データベース初心者:2005/05/16(月) 18:24:44 ID:oIkLPVZj
質問です。
あるクラスの生徒の食べ物の好みをデータベースにしたいのですが、
ラーメン、餃子、レバニラ炒め、ハヤシライス等の食べ物リストがあり、
各生徒はそれらの食べ物から好きな物を選びます。複数選択可能です。
これをデータベースで表現するとどうすれば良いでしょうか?
915NAME IS NULL:2005/05/16(月) 18:42:56 ID:5aaoni6l
証券会社に就職がきまったのですが、SQLとか学んだほうが
いいですか?

職種は、債権ディーラーなんですが。
916データベース初心者:2005/05/16(月) 18:45:20 ID:oIkLPVZj
補足)
食べ物の種類は100種類ぐらいあります。
917データベース初心者:2005/05/16(月) 18:57:12 ID:oIkLPVZj
>>915
私みたいなのが言うのもなんですがマイクロソフトアクセス使えます。
みたいなこといえれば、お、できる奴、って思われるんじゃないですかね。
なんで覚えておいたほうが良いと思いますよ。
918NAME IS NULL:2005/05/16(月) 19:21:31 ID:???
>>914
生徒テーブル
--------------
PK 生徒ID
生徒名


食べ物テーブル
--------------
PK 食べ物ID
食べ物名


好みテーブル
--------------
PK 生徒ID
PK 食べ物ID



この程度の基本的な事が解らないのか・・・・
データモデリングについての本で勉強した方が良いぞ。
919データベース初心者:2005/05/16(月) 21:09:07 ID:oIkLPVZj
>>918

ああ、なるほど〜〜そうすればいいんですね・・・

ちゃんとデータモデリングについて勉強します・・・・お勧めの本ありますか?
920918:2005/05/16(月) 21:14:25 ID:???
>>919
↓のスレを参考にしてくれやす

【より良い】データモデリング【モデルを】
http://pc8.2ch.net/test/read.cgi/db/1057509675/l50
921データベース初心者:2005/05/16(月) 21:25:55 ID:oIkLPVZj
>>920

ご丁寧にありがとうございます。恐縮です。
そちらのスレ、ちょっと覗きましたが奥が深そうですね・・データベースって・・・・
溺れないように頑張ります・・・・
922NAME IS NULL:2005/05/16(月) 21:57:57 ID:BP31J9XN
画像掲示板を作ろうと思います。
元々は自分が持っている100万枚のエロ画像を管理するために
データベースを構築していたのですが、
それを応用して画像掲示板を作り、みなさんにも使ってもらおうと思っています。
でもまだ名前がないので、みなさんで考えてください。
でも「ちゃんねる」がつかない名前でお願いします。
923NAME IS NULL:2005/05/17(火) 01:42:03 ID:???
>>912
>>913
全角以外でもダメでした('A`)
構文的には間違ってないんでしょうか?
924NAME IS NULL:2005/05/17(火) 02:22:35 ID:???
間違ってないと思うが、、両方に含まれてるものだけを出力するんだよね?
925NAME IS NULL:2005/05/17(火) 02:52:45 ID:???
>>924
そうです。
会員登録やログインページの型を作るつもりなんです。
で、登録画面で入力された値が既存しないかどうか確認するために

$sql="SELECT name FROM tableA WHERE name = '"._es($_SESSION["name"])."'";

ってやって、これだとうまくいくんですが、

$sql="SELECT tableA.name,tableB.name FROM tableA,tableB
WHERE tableA.name=tableB.name
AND tableA.name = '"._es($_SESSION["name"])."'";

これだとダメなんです。
エラーはでません。
926NAME IS NULL:2005/05/17(火) 03:38:34 ID:???
$sql="SELECT name FROM tableB WHERE name = '"._es($_SESSION["name"])."'";
のほうはどうなんだ?
927NAME IS NULL:2005/05/17(火) 17:11:24 ID:???
以下のようなテーブルがあるとします。(このテーブルは既存のもので変更できません)
CREATE TABLE t (
id, /* プライマリキー */
regdate, /* 登録日。ユニークとは限らない */
user, /* ユーザID */
name, /* 名前 */
addr, /* 住所 */
... );
ここで、
1) ある条件を満たすユーザの集合における
2) そのユーザの最新のレコード
を取得しようとしています。が、SQLを書いてみるとやけにややこしいモノになってしまいました。(SELECTが4回……)
もう少しシンプルにしたいのですが、何か方法はありますか?
なお、環境はOracle8iです。(オプショナルなモジュールは入っていないので、分析関数等は使えません)

SELECT * FROM t WHERE id IN (
SELECT MAX(id) FROM t, (
 SELECT MAX(regdate) max_regdate, user FROM t
 GROUP BY user
 HAVING user IN ( SELECT DISTINCT user FROM t WHERE 条件式 )
) t2 WHERE t.user = t2.user AND t.regdate = t2.max_regdate )
ORDER BY regdate DESC;
928927:2005/05/17(火) 18:06:57 ID:???
済みません、訂正です。(下から2行目のGROUP BYが抜けた)

SELECT * FROM t WHERE id IN (
SELECT MAX(t.id) FROM t, (
 SELECT MAX(regdate) max_regdate, user FROM t
 GROUP BY user
 HAVING user IN ( SELECT DISTINCT user FROM t WHERE 条件式 )
) t2 WHERE t.user = t2.user AND t.regdate = t2.max_regdate
GROUP BY t.user )
ORDER BY regdate DESC;
929927:2005/05/17(火) 18:07:41 ID:???
済みません、訂正です。(下から2行目のGROUP BYが抜けた)

SELECT * FROM t WHERE id IN (
SELECT MAX(t.id) FROM t, (
 SELECT MAX(regdate) max_regdate, user FROM t
 GROUP BY user
 HAVING user IN ( SELECT DISTINCT user FROM t WHERE 条件式 )
) t2 WHERE t.user = t2.user AND t.regdate = t2.max_regdate
GROUP BY t.user )
ORDER BY regdate DESC;
930927:2005/05/17(火) 18:09:27 ID:???
済みません、訂正です。(下から2行目のGROUP BYが抜けた)

SELECT * FROM t WHERE id IN (
SELECT MAX(t.id) FROM t, (
 SELECT MAX(regdate) max_regdate, user FROM t
 GROUP BY user
 HAVING user IN ( SELECT DISTINCT user FROM t WHERE 条件式 )
) t2 WHERE t.user = t2.user AND t.regdate = t2.max_regdate
GROUP BY t.user )
ORDER BY regdate DESC;
931927:2005/05/17(火) 18:10:18 ID:???
済みません、多重投稿に……orz
932NAME IS NULL:2005/05/17(火) 21:59:09 ID:???
>>927
一般的にはregdateとuserでユニークと考えていいように思うのですが、
max(id)という記述があるからユニークじゃないのでしょうか?
regdateとuserでユニークならばもう少しシンプルになると思います。
また同じuserで複数のregdateがある意味が履歴以上の意味を持ってない場合は、
履歴用のテーブルを別にして現在アクティブのuserだけのテーブルをつくれば
きわめてシンプルでパフォーマンスも良くなります。
933NAME IS NULL:2005/05/17(火) 23:52:56 ID:???
>>927

このスレでもさんざん外出だが…

select * from t as t1
where 条件
and not exists (
select * from t
where user = T1.user
and (( regdate > T1.regdate ) or
( regdate = T1.regdate and id > T1.id ))
)
934927:2005/05/18(水) 00:59:07 ID:???
情報大変感謝。
>>932
残念ながら、userとregdateでユニークであることは保証されていません。実用上はそう簡単には生じないはずなんですけど、テストデータで問題が発現してしまったので対応せざるを得ず(^^;
あと、テーブル構造を変更したいのは山々なんですが、既存システムへの影響が大き過ぎて断念しますた。
>>933
う゛、このスレで既出だったんですか。さんざんいろんなパターンでぐぐって見付けられなかったんですが、正に灯台元暗し。
最大値==MAX()と視野狭窄してたもので……。[not] existsは使ったことがなかったので大いに参考になりました。
935NAME IS NULL:2005/05/18(水) 02:39:10 ID:???
大学のサークル内で各自作成したデータを、Web上に日付順にアップロード
するようなシステムを構築したいのですが適した方法はありませんか?
またその際、サークル内で決めたID・パスワード等を用いてログインする
ことで、アクセス制限させるようにしたいと思っています。

分かりにくい質問ですみません。
データベースとは直接関係ないことですができれば教えてください。
936NAME IS NULL:2005/05/18(水) 03:56:28 ID:???
>データベースとは直接関係ないことですが
よくわかってるじゃないか
937NAME IS NULL:2005/05/20(金) 21:03:41 ID:WRX51hc3
Access(ADO)+SQL2Kで開発しようと思ってるんですが、
どこをADO(VBA)で、どこをSP(SQL2K)で開発すると
速度上がりますか?
ADO(VBA)とSP(ストアド)の住み分けがわかりません。
ばかで申し訳ありませんが、教えて下さい。
938NAME IS NULL:2005/05/21(土) 00:29:38 ID:???
>>937
処理実行速度に関しては、
ストアドだとDBMSが効率的な手段とタイミングで処理しますが、
VBAだと、これらは制作者に委ねられ、DBMSからAccessへのデータ転送が発生します。
よって一般にストアドの方が高速実行となりますが、SQLを書く腕にも大きく左右されます。

また、処理開発効率に関しては、
SQLの方が表現力が低い分、一般に後に戦うべきバグが少なくなりストアドの方が楽になりますが、
処理の複雑さと規模が小さい場合には、VBAの方が手早く柔軟性も高いでしょう。
よって一般にストアドが効率的開発に向きますが、仕様やSQLの腕にも大きく左右されます。


939NAME IS NULL:2005/05/21(土) 00:32:22 ID:4HJtkX17
OracleでMySQLで言うHHH:MM:SSみたいな形式って使用できるんでしょうか?
940NAME IS NULL:2005/05/21(土) 00:56:06 ID:???
>>939
出来るよん!
941NAME IS NULL:2005/05/21(土) 01:13:15 ID:???
VBでADOとかODBCとかでPostgreSQLに接続して
グリッドに表示したり変更したりできるようになりました。
更に制約違反になる操作をしたら、それに応じたエラーメッセージを表示しようとしてます。

が、ConnectionのErrorsのDiscriptionにはちゃんとしたエラーメッセージが入ってるのに、
Numberがいつも-2147467259(80004005)なんです。
-2147467259という数字に関しては様々な記述がありますが、
こういう状況に関する物は見付かりません。

制約違反って全部同じエラーコードなんですか?
そうでなければ、ちゃんとしたエラーコードってどうやったら取得できるのでしょうか?
942939:2005/05/21(土) 01:16:37 ID:???
>>940
Oracleでも使えるんですね。
ありがとうございました。
943NAME IS NULL:2005/05/21(土) 01:58:09 ID:1pDzoEyj
私は現在、フリーペーパー事業の会社に勤務しています。

システム部が作成するアクセスは1つのテーブルで、
契約書No.で顧客管理と売上管理をすると
方法を考えているようです。

でもその場合ですと
・再度契約した場合に異なる契約書No.に
 同じ契約者の(データ)がある。

という事になり、同じ契約者に対して
複数の契約書No.を管理することになり、
売上集計はまだいいのですが、
旅行券発行枚数等の顧客別の集計を取る際は、
いろいろ面倒ではないかと感じました。

それよりも顧客管理と売上等の契約書No.管理は
全く別ものであるから、アクセスで
下記の2つテーブルを作成し、

@顧客ID(重複番号無し)をつけて顧客(契約者)の
住所・電話番号・業種等を管理するするテーブル


A契約書No.(重複番号無し)で売上・旅行券発行等管理をし、
 なおかつ見積書発行・請求書発行等を作成できるテーブル


Aのテーブルに顧客IDを連動(クエリー?)させたら
顧客別の売上・旅行券の発行枚数・契約回数等の
管理やデータ収集もでき、売上全体に対する顧客別割合等の
集計等もだしやすいのでは?

と考えました。
私の考え方は、間違っているのでしょうか?
アクセスは聞きかじり程度の知識しかありません。
どなたかご教授をお願い申し上げます。


944NAME IS NULL:2005/05/21(土) 02:16:12 ID:???
>>943
フリーペーパーと旅行券の繋がりや、
契約書No.の意味や、どういう用途に使いたいのか等わかりませんが、

1テーブル案は間違いなく不適切なので、一度2テーブル案で作ってみる
ことをおすすめします。Accessなら手間もかからないかと思います。
945NAME IS NULL
99%以上が一見客、かつ顧客情報として持つべきデータが少ない
とかなら不適切とも言い切れない