X



トップページDB@2ch掲示板
1002コメント330KB
SQL質疑応答スレ 17問目 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001NAME IS NULL
垢版 |
2016/07/10(日) 22:29:01.40ID:???
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。

SQLという言語はISOによって標準化されていますが
この標準を100%実装したDBMSは存在せず、
また、DBMSによっては標準でない独自の構文が
追加されていることもあります。

質問するときはDBMS名を必ず付記してください。

【質問テンプレ】
・DBMS名とバージョン
・テーブルデータ
・欲しい結果
・説明

前スレ:
SQL質疑応答スレ 16問目
http://echo.2ch.net/test/read.cgi/db/1447160858/
0309NAME IS NULL
垢版 |
2017/05/04(木) 16:35:58.81ID:???
>>307
> 知ってるなら最初から使おうな。
ちゃんとした知識持ってる奴なら >>287 のリンク先読めばわかるし
それでわからんような奴にカーディナリティとか言ってもしょうがないだろ
さすがに中途半端にカーディナリとか言う知ったかさんの存在までは想定しとらん

> 使われないから意味ないんだよ。
なぜ使われないんだ?
に対して「使われないから」って日本語大丈夫か?

> まぁ、monthを軸にした検索をすれば使われるだろうが、今回の流れとは関係ないね。
>> (year=2017 and month>=4) or (year=2018 and month<=3)
で関係ないと考える奴にどう説明しろと?

> bitmap index scanだから何?
>>287 のリンク先読めよ
それでもわからないと言うから >>295 でも説明してる
さらにそれでもわからんと言うならわからない箇所を引用してくれ

すごく中途半端な知識で語ってるようだからどこがわからんのか予測できないし
0310NAME IS NULL
垢版 |
2017/05/04(木) 16:47:15.20ID:???
>>308
> ・year, monthにインデックスを張れば、>>179のような会計年度別集計などの場合にインデックスが使われる(もちろん、使った方がコスト的に有利な場合)
複合インデックスの話だよね?
それならBit Map Index Scanになるから実行時にインデックスデータについてソート処理が走るんだよ?
そこ理解してる?
ちなみに俺は
> インデックス使いたいならdate型にしとけよ
って言ってるから普通にIndex Scanするだけなのでソート処理なんて要らんから
0311NAME IS NULL
垢版 |
2017/05/04(木) 17:13:18.38ID:???
なんでBit Map Index Scanになるのが当然のような言い方なんだか。
0312NAME IS NULL
垢版 |
2017/05/04(木) 17:21:33.21ID:???
>>311
他の方法があると言うなら示してみて
0313NAME IS NULL
垢版 |
2017/05/04(木) 17:22:38.91ID:???
そろそろ結論出して終わりにしてください
結論がまとまらないなら、両論併記で良いと思います
0314NAME IS NULL
垢版 |
2017/05/04(木) 17:28:28.15ID:???
お互い相手のことを馬鹿だと思っているなら
馬鹿相手にムキになっている自分を恥じたほうがいいと思うが
0315NAME IS NULL
垢版 |
2017/05/04(木) 17:48:27.91ID:???
いや既に結論出てるけど理解できない人が食い下がってるだけ
0316NAME IS NULL
垢版 |
2017/05/04(木) 18:23:25.80ID:???
>>180で答え出てるから後は設計スレでしてくれ
閑古鳥鳴いてるからウェルカムだぞ
0317NAME IS NULL
垢版 |
2017/05/05(金) 11:22:05.92ID:???
せめて年月から会計年度を返す関数化してくれ
0318NAME IS NULL
垢版 |
2017/05/09(火) 13:37:10.07ID:???
>>310
> それならBit Map Index Scanになるから実行時にインデックスデータについてソート処理が走るんだよ?
> そこ理解してる?
その「ソート処理」は、計画ノード種別の「ソート」じゃなくて、Bitmap Index Scanのアルゴリズム上、実装コードで
ソートが必要だということじゃないの?
実際、>>282の実行計画には、「ソート」はないわけで。
で、アルゴリズム上、ソートが必要だとして、何か問題でも?

> > インデックス使いたいならdate型にしとけよ
> って言ってるから普通にIndex Scanするだけなのでソート処理なんて要らんから
Index Scanの場合も、aggregateするときに、実装コードでソートが必要な気がするが。
(ソートせずに何回もループしてもいいが、多分ソートするんじゃないかと思う)
0319NAME IS NULL
垢版 |
2017/05/09(火) 13:48:09.40ID:???
ケースバイケース
0320NAME IS NULL
垢版 |
2017/05/09(火) 13:48:27.88ID:???
>>309
> なぜ使われないんだ?
なぜもクソも使わないんだよ。

> >> (year=2017 and month>=4) or (year=2018 and month<=3)
> で関係ないと考える奴にどう説明しろと?
関係ないね。
関係あるというなら、テストデータ作って実行計画出してみな。

> すごく中途半端な知識で語ってるようだからどこがわからんのか予測できないし
俺がお前に言いたい言葉だな。
0321NAME IS NULL
垢版 |
2017/05/09(火) 14:10:30.17ID:???
親切なので、year, monthに個別にindexを張った場合の実行計画を取ってみた。
https://explain.depesz.com/s/UapJ

書き忘れたが、
> インデックス使いたいならdate型にしとけよ
大本の話は会計年度で集計するときの話。
date型なら会計年度を取得して集計する必要があって、そこでストアドやビルトイン関数使うと
日付カラムにindexあっても使われないって話な。

さらに言えば、会計年度カラム追加しろとかいう話なら、今のままで複合インデックスつけて普通に
検索しろってこった。
(何度ループするんだよ)
0322NAME IS NULL
垢版 |
2017/05/09(火) 14:24:55.28ID:???
さらにおまけ。

# \d fuga
テーブル "public.fuga"
列 | 型 | 修飾語
--------+---------+--------
dt | date |
amount | integer |
インデックス:
"fuga_idx" btree (dt)

explain analyze verbose select sum(amount) from fuga where dt between '2013-04-01' and '2014-03-31';

実行計画:
https://explain.depesz.com/s/533s
Bitmap Index Scanになってますが。
0323NAME IS NULL
垢版 |
2017/05/09(火) 14:55:26.36ID:???
これにもレスしとこう。

前提として、seq scanではパフォーマンス的に問題があるレベルのレコード数の場合。
>>316
> >>180で答え出てるから後は設計スレでしてくれ

whereで式を使うと、そのカラムにインデックスがあっても使われない。
> Seq Scan on public.hoge (cost=0.00..30406.00 rows=5000 width=12) (actual time=0.028..253.216 rows=100600 loops=1)
> Output: year, month, amount
> Filter: ((((hoge.year * 100) + hoge.month) >= 201604) AND (((hoge.year * 100) + hoge.month) <= 201703))
> Rows Removed by Filter: 899400
> Execution time: 288.702 ms

なお、PostgreSQLには式インデックスという機能があって、それを作ればインデックスが使われる。
create index hoge_calc_idx on hoge((year*100+month));
> Bitmap Index Scan on hoge_calc_idx (cost=0.00..106.42 rows=5000 width=0) (actual time=13.776..13.776 rows=100600 loops=1)
> Index Cond: ((((hoge.year * 100) + hoge.month) >= 201604) AND (((hoge.year * 100) + hoge.month) <= 201703))
> Execution time: 74.346 ms
0325NAME IS NULL
垢版 |
2017/05/10(水) 10:29:23.99ID:???
>>324
まあ、微粒子レベルで俺が間違ってる可能性があるからな
0326NAME IS NULL
垢版 |
2017/05/10(水) 10:41:42.84ID:???
>>325
お前が>>323なら、おかしいのはお前の相手の方だから心配すんな
>>268からずっとおかしい
相手するだけ無駄
0327NAME IS NULL
垢版 |
2017/05/10(水) 10:55:53.42ID:???
今時、コストベースがどうこうとか言う奴だからな。
10年以上前にちょろっとDB触ったレベルの奴じゃね?
0328NAME IS NULL
垢版 |
2017/05/10(水) 14:06:04.96ID:???
・ストアドにしてオーバーロードしろ
・インデックス使いたいならdate型にしろ
・date型にしないなら個別インデックスにしろ
・Bit Map Indexガー
・ソートガー

全部同じやつでしょ
最初からおかしい
0329NAME IS NULL
垢版 |
2017/05/10(水) 17:35:34.21ID:???
今更というかやっと式インデックスが出てくる脱力感
0330NAME IS NULL
垢版 |
2017/05/10(水) 18:21:15.72ID:???
>>329
式なんか使わずに普通にクエリ書けと何度言ったら
0331NAME IS NULL
垢版 |
2017/05/15(月) 18:17:10.53ID:/ZtiK+kF
Local and global coordinate system
0332NAME IS NULL
垢版 |
2017/05/29(月) 23:01:50.19ID:OpaRYJdt
・Postgresql 8.4

・テーブルデータ
|col_a|col_b|col_c
-----------------
name1 1  0
name1 0  3
name2 0 2
name2 0 2
name3 0 3
name3 0 4


・欲しい結果
|col_a|col_b|col_c
-----------------
name1 1  0
name1 0  3
name3 0 3
name3 0 4

・説明
列col_aの文字列が同じで、col_bとcol_cの数値が一致しないタプルを取り出したいのですが
どのようなSQLでいけるでしょうか?よろしくお願いします。
0333NAME IS NULL
垢版 |
2017/05/29(月) 23:52:29.72ID:???
>>332
SELECT S1.col_a, S1.col_b, S1.col_c
FROM 'テーブル名' S1 , 'テーブル名' S2
WHERE S1.col_a = S2.col_a
AND (S1.col_b <> S2.col_b OR S1.col_c <> S2.col_c)
ORDER BY S1.col_a ;

間違ってたらごめん
0334NAME IS NULL
垢版 |
2017/05/29(月) 23:57:58.93ID:ppw3vS3C
>>332
グループ化で複数レコードが存在存在するnameを排除すればいい。
0335NAME IS NULL
垢版 |
2017/05/30(火) 00:12:21.01ID:???
複数レコードが存在するレコードを削除すればよい、ではなくてか。
having count(*) = 1 みたいに。
0336NAME IS NULL
垢版 |
2017/05/30(火) 00:13:06.46ID:???
削除っていうと聞こえが悪いけど、そこはご勘弁
0337NAME IS NULL
垢版 |
2017/05/30(火) 14:28:59.06ID:dt3JZxtj
>>332
DISTINCT
0338NAME IS NULL
垢版 |
2017/05/30(火) 14:35:58.66ID:???
まとめると
SELECT col_a, col_b, col_c FROM テーブルデータ GROUP BY (col_a, col_b, col_c) HAVING COUNT(*) = 1
こうかね?
ORDER BYもいるとは思うけど

DISTINCTは name2 0 2 も1件でちゃうような
0339NAME IS NULL
垢版 |
2017/05/30(火) 15:13:05.29ID:???
select * from テーブルデータ where col_a in (select col_a from テーブルデータ group by col_a,col_b,col_c having count(*) = 1);
0340NAME IS NULL
垢版 |
2017/05/30(火) 16:13:29.76ID:???
a,b,c以外にも表示したいときはそうなるか
まあ (a,b,c) in (select a,b,c from 〜 ) とかになるだろうけども
0341NAME IS NULL
垢版 |
2017/07/11(火) 14:39:34.13ID:VmiHpvub
項目A,B,C,Dの値を入れ替えたいです。
・DBMS名とバージョン:postgreSQL 8.4.13
・テーブルデータ
A B C D
1 2 3 4
1 2 3 4
2 3 4 1
このテーブルのAの値をBに、Bの値をCに、Cの値をDに、Dの値をAに入れたいです。
A B C D
4 1 2 3
4 1 2 3
1 2 3 4
としたいです。

UPDATE TABLENAME SET A = D, B = A, C = B, D = C;
でよいのでしょうか。よい場合、変更する項目数が50位でも大丈夫でしょうか。
検索したところ、2項目の入れ替えはこれでよいようなのですが、
複数(多数)の場合でもよいものか教えていただきたいです。
よろしくお願いします。
0343NAME IS NULL
垢版 |
2017/07/12(水) 02:12:00.48ID:???
>>342
ありがとうございました。自信を持って(?)作業します。
0344NAME IS NULL
垢版 |
2017/07/12(水) 05:24:51.54ID:???
え、BにDの値入らない?大丈夫?
0345NAME IS NULL
垢版 |
2017/07/12(水) 10:20:42.90ID:???
>>344
大丈夫

updateが完全に完了するまでは古いレコードは残っていて(そうしないとrollbackできない)、
>>341のクエリは、更新前のレコードをold、更新後のレコードをnewとするなら、
UPDATE TABLENAME SET new,A = old.D, new,B = old.A, new,C = old.B, new,D = old.C
というような処理が行われる
0346341
垢版 |
2017/07/12(水) 12:30:52.13ID:???
レスありがとうございます。
>>344 >>345
検索して調べたときに知ったのですが、
postgreSQL,SQLserver,おそらくoracleは大丈夫。
MySQLは、左から順に評価するので、たぶんBはDの値になるようです。
みなさん一時項目を使ったり、足し算引き算をしたりして工夫されているようです。
0347NAME IS NULL
垢版 |
2017/07/12(水) 14:25:49.61ID:???
mysqlは(1,2,3,4) -> (4,4,4,4)になるよ
クソ
0348NAME IS NULL
垢版 |
2017/07/12(水) 14:36:41.10ID:???
え、SQLってこの程度のことも規約で決まってなかったのか
0349NAME IS NULL
垢版 |
2017/07/12(水) 19:37:23.75ID:???
>>345
>>346
質問者じゃないけど、参考になる例題でした。
0350NAME IS NULL
垢版 |
2017/07/12(水) 21:55:04.69ID:???
一時テーブルを作成して、更新後の並びになるようにコピーする
元テーブルのレコードを削除して、一時テーブルからコピーする

なんてやるのはどうなんだろう?

create temporary table tmp select d as a,a as b, b as c, c as d from TABLENAME;
delete from TABLENAME;
insert into TABLENAME select * from tmp;
0351NAME IS NULL
垢版 |
2017/07/13(木) 05:58:18.91ID:???
【テンプレ】
・DBMS名とバージョン : mysql Ver 14.14 Distrib 5.1.73,
・テーブルデータ : 添付画像をご覧ください
・欲しい結果 ; 添付画像をご覧ください

http://fast-uploader.com/file/7055447564296/

・説明

※添付画像では、col1被り数の1行目(セル番地で言うとおB5セル)を例に取っています)
※添付画像の、数式表示欄を見ていただますようお願いいたします。(Excelの式が入っております。)

DB上にテーブルがあり、code1、code2、code3と列があります。
code1、code2、code3の、全ての行の「どこか」でデータが被っています。被っていない所もあります。
被っているのは、同一列だったり、別の列の違う行だったり、はてまて、同じ行の別の列だったり様々です。

これを、col1被り数、col2被り数、col3被り数のように、「被ってる行」をカウントしたいんですが、
方法がさっぱり思いつきません。


何卒ご教示くださいますよう、お願いいたします。
0352341
垢版 |
2017/07/13(木) 13:19:26.70ID:???
>>350
SQLが通るかどうかは置いといて、結果の並び順は保証されていないので
キーを使うなどしないと「たまたま」動作したということになると思います。
0355NAME IS NULL
垢版 |
2017/07/13(木) 20:46:37.04ID:???
>>353
ありがとうございます!印刷して家宝にします!!!
0356341
垢版 |
2017/07/14(金) 01:19:55.97ID:???
>>354
列の並び順を替えるにしても、行の順が元テーブルと違っちゃうかも
しれませんよという話です。
キーの部分を書くのが面倒で省略したということかもしれません。
0357NAME IS NULL
垢版 |
2017/07/14(金) 01:28:39.43ID:???
行の順序が変わったとしても、それが何か影響を与えるとは思わないんだが
0358341
垢版 |
2017/07/14(金) 09:16:50.89ID:???
>>357
なるほど了解。
0359NAME IS NULL
垢版 |
2017/07/14(金) 10:11:57.35ID:???
mysqlならストアドだろうな
0360NAME IS NULL
垢版 |
2017/07/16(日) 03:19:50.47ID:???
初めてVPSで構築しています。
MySQL設定でハマってます。

Pleskだと/etc/my.cnfや/etc/php.d/mysql.iniは無視されるのでしょうか?
my.cnfに書いてみたんですが、どうも反映されてないようです。

MySQLTunerを実行してみると
failed to execute: SELECT VERSIONのようなのが鬼のように表示され、
General recommendationsに下記のように表示されてます。

query_cache_size (=0)
query_cache_type (=0)
query_cache_limit (> 1M, or use smaller result sets)
join_buffer_size (> 128.0K, or always use indexes with joins)
tmp_table_size (> 16M)
max_heap_table_size (> 16M)
thread_cache_size (start at 4)
table_open_cache (> 400)
performance_schema = OFF disable PFS
innodb_file_per_table=ON
innodb_log_file_size * innodb_log_files_in_group should be equal to 1/4 of buffer pool size (=64M) if possible.

(=0)は0にしなさい。
(> 1M)は1MB以上に指定しなさい。
それに合わせてmy.confに入れてみたんですが、
これが全く変わりません。
0361NAME IS NULL
垢版 |
2017/07/16(日) 10:22:53.35ID:???
straceしてみてどの設定ファイル読んでるか確認してみたら?
0362NAME IS NULL
垢版 |
2017/07/17(月) 08:19:42.44ID:???
久しぶりに来た半初心者なのですが、上の方の議論で出てた会計年度の話は、単に引き算を利用してはいけなかったんでしょうか

4ヶ月引いて1日足して、としてやれば安定して通常年度に戻せる気がするのですが
0363NAME IS NULL
垢版 |
2017/07/17(月) 10:26:23.55ID:ELQvIlPL
日付から年度を求めたい、という話?
そういうのでもいいけどそれ間違ってるからね
0364NAME IS NULL
垢版 |
2017/07/17(月) 10:28:40.66ID:???
どの話をしようとしているのか分からん

4ヶ月引いて1日足すというだけでも
30日に1日足したら31日になるのか1日になるのかどう判断するんだ?
0365NAME IS NULL
垢版 |
2017/07/17(月) 10:39:33.34ID:???
>>363
ほんとだ
なんで足す1出てきたし4なんですかね

なんにせよありがとう
0366NAME IS NULL
垢版 |
2017/07/23(日) 12:32:38.73ID:???
例えば、左から右に行って、
途中でジェイってなって、そのまま終わったらいいかと思うんですが。
新しいSQLの概念というか。
0367NAME IS NULL
垢版 |
2017/07/23(日) 15:48:13.53ID:???
>>386が何を言ってるのかさっぱり判らぬ
0369NAME IS NULL
垢版 |
2017/07/23(日) 16:38:22.44ID:???
大丈夫、俺も分からん
0370NAME IS NULL
垢版 |
2017/07/23(日) 16:58:56.49ID:???
RDBMS使ってRPG作ろうとしているのかな?
0371NAME IS NULL
垢版 |
2017/07/23(日) 19:13:31.67ID:ic0ZKVtq
月末日なんて翌月の1日前なのになw
0374NAME IS NULL
垢版 |
2017/07/23(日) 21:05:31.62ID:???
>>372
月末の次の日が1日じゃないケースってなに?
0375NAME IS NULL
垢版 |
2017/07/23(日) 21:59:12.88ID:???
>>371の言う「翌月の1日前」が「翌月の1日の1日前」という意味なら、ってことだろ。
0376NAME IS NULL
垢版 |
2017/07/23(日) 22:36:23.90ID:???
7月23日の翌月の1日前は8月22だろjk
0377NAME IS NULL
垢版 |
2017/07/23(日) 22:46:18.66ID:???
おまえ、そんな頭のレベルでよくSQL云々出来るなぁ
0378NAME IS NULL
垢版 |
2017/07/23(日) 23:25:31.06ID:???
IPAの試験が、読解力を試されるような問題だらけになるわけだ。
0379NAME IS NULL
垢版 |
2017/07/23(日) 23:40:56.92ID:???
営業日の話ししてんじゃないのか
0380NAME IS NULL
垢版 |
2017/07/24(月) 00:34:13.18ID:???
複数の同一形式のcsvからデータを読み取る時、普通は↓こんな風に定義するけど、

[001.csv]
[002.csv]
[003.csv]
Col1=F1 Char Width 255
Col1=F2 Char Width 255

ユニオンで縦連結する時は、↓こうじゃないと定義内容が反映されない。

[001.csv]
Col1=F1 Char Width 255
Col1=F2 Char Width 255

[002.csv]
Col1=F1 Char Width 255
Col1=F2 Char Width 255

[003.csv]
Col1=F1 Char Width 255
Col1=F2 Char Width 255

何で?
0381NAME IS NULL
垢版 |
2017/07/26(水) 22:15:23.65ID:???
・tableA
日付、名前、国語、算数、英語
5/1 赤木 100、100
5/1 三井 50、70
5/1、桜木、40、20

6/1 赤木 100、100
6/1 三井 50、50
6/1、桜木、20、40

7/1 赤木 100、100
7/1 三井 70、70
7/1、桜木、50、50

・tableB
採点開始日、名前 
7/1、桜木
5/1、赤木
6/1、三井

・採点平均
名前、国語平均、英語平均
赤木 100、100
三井 60、60
桜木 50、50


↑のテーブルAのデータを
テーブルBの採点開始日からの採点平均をだしたい
↓で大丈夫だろうか? あらかじめJoinしておいたほうがレスポンス的にはよいのかな?

SELECT tableA.名前,AVG(tableA.国語)AS 国語平均,AVGtableA.英語)AS 英語平均
FROM tableA,tableB
WHERE tableA.日付 >= tableB.採点開始日
AND tableA.名前,tableB.名前
0382NAME IS NULL
垢版 |
2017/07/26(水) 22:18:02.28ID:???
>>381
tableA は
日付、名前、国語、英語
です。
0383NAME IS NULL
垢版 |
2017/07/26(水) 22:38:14.43ID:???
>>381

SELECT tableA.名前,AVG(tableA.国語)AS 国語平均,AVG(tableA.英語)AS 英語平均
FROM tableB
inner join tableA
on tableA.日付 >= tableB.採点開始日
AND tableA.名前=tableB.名前
group by tableA.名前
でいいんじゃないかな
0384NAME IS NULL
垢版 |
2017/07/26(水) 22:55:56.85ID:???
>>383
ありがとうございます
join したほうがいいのかな
これを参考にしてやってみます。
0385NAME IS NULL
垢版 |
2017/07/27(木) 11:16:31.96ID:???
>>384
データ量はたぶんたかだか数万レコード程度だろうから、どんなやり方でもパフォーマンス的には気にする必要ないと思うよ
0386NAME IS NULL
垢版 |
2017/07/27(木) 21:34:59.28ID:???
>>383
横からだが、fromとwhereで結合しても、joinで結合しても
書き方が違うだけで同じだぞ

パフォーマンス気にするなら、使ってるDBMSの実行計画読めるようにならないと
事前に結合した実データ(のテーブルやビュー)用意するんじゃなければ
SQLの書き方では差がでないのが原則
0387NAME IS NULL
垢版 |
2017/07/27(木) 22:17:49.93ID:Wb6w4MLZ
じじいが嘘を広めていることもあるから混乱するんだよな。
0388NAME IS NULL
垢版 |
2017/07/27(木) 22:31:45.92ID:???
tableAのデータがあった場合、tableBの結果と、tableCのビューが欲しいです。
tableAの補習が入った場合は学校にいくまでの間はすべて補習の時間になります。
まったく書き方が見当がつかないのでアドバイスお願いします

tableA
時間、学校、部活、補習

2017/6/1 06:00:00、NULL、OK、NULL
2017/6/1 07:00:00、NULL、OKL、NULL
2017/6/1 08:00:00、OK、NULL、NULL
2017/6/1 09:00:00、OK、NULL、NULL
2017/6/1 10:00:00、OK、NULL、NULL
2017/6/1 11:00:00、OK、NULL、NULL
2017/6/1 12:00:00、OK、NULL、NULL
2017/6/1 13:00:00、NULL、OK、OK
2017/6/1 14:00:00、NULL、OK、NULL
2017/6/1 15:00:00、NULL、OK、NULL
2017/6/1 16:00:00、OK、OK、NULL
2017/6/1 17:00:00、OK、NULL、NULL
2017/6/1 18:00:00、NULL、OK、NULL
2017/6/1 19:00:00、NULL、OK、NULL
2017/6/1 20:00:00、NULL、OK、NULL
2017/6/1 21:00:00、NULL、OK、NULL

tableB
時間、活動

2時間、部活
5時間、学校
3時間、補習
2時間、学校
4時間、部活

tableC
時間、活動

7時間、学校
6時間、部活
3時間、補習
0389NAME IS NULL
垢版 |
2017/07/27(木) 22:40:11.70ID:???
他人にわかる説明ができるようになったら解決するんじゃないかな。
0390NAME IS NULL
垢版 |
2017/07/27(木) 22:56:18.00ID:???
>>388
tableBとtableCはビューB,、ビューCをだしたいに訂正します。
ビューCはビューBの部活、学校、補習の合計時間をだします。

tableA は1時間間隔で 活動した予定にOKが付きます

6時と7時は部活をやっているので2時間になります。
そのあと学校が5時間

その次は部活と補習がOKになっていますが
補習がOKなったら、学校がOKになるまで補習の時間なので
補習が2時間になります。

この流れで↓の結果が欲しいです。

ビューB
時間、活動

2時間、部活
5時間、学校
3時間、補習
2時間、学校
4時間、部活

ビューC

7時間、学校
6時間、部活
3時間、補習


SQLだけで書くのは見当がつかないのでアドバイスお願いします。
0391NAME IS NULL
垢版 |
2017/07/27(木) 23:04:51.56ID:???
SQLだけで書けないと思ったのにSQLスレなのか
DBだけでやれない想定として、どういう風に実装予定なの?
ざっくりでいいからさ(Java使って、とかWindows上でとか)
0392NAME IS NULL
垢版 |
2017/07/27(木) 23:33:31.06ID:???
SQLだけでできるかわからないので質問しました。
今回のような内容はSQLでやるべきではない?SQLでできてもものすごくめんどくさい?
の状態です。似たような内容を何件か取得したいと思っているのでしりたいです。

SQLだけでビューB、ビューCをだせるなら、Windows上のアプリ でそれを取得してCSVデータにするのが簡単だと思っています。

SQLだけで無理ならtableAのデータからCSVデータを作成のつもりです。
0393NAME IS NULL
垢版 |
2017/07/27(木) 23:42:29.20ID:???
ビューとして取る必要があるの?
画面に表示したいとか?
取得したデータをそうしたいの?
0394NAME IS NULL
垢版 |
2017/07/27(木) 23:50:08.71ID:???
ビューとして取れるようにしておけばそのままCSVにだすだけで簡単なのと、
画面に表示したいと思っています。
取得したデータの操作は考えていません。
0395NAME IS NULL
垢版 |
2017/07/27(木) 23:50:42.81ID:???
データが絶対に1時間間隔で抜けはないってならSQLだけでできるんじゃね

俺ならBはtableA を時間でソートして、ホストアプリでブレークチェックしながらカウントして表示するけどな
0396NAME IS NULL
垢版 |
2017/07/28(金) 00:01:52.52ID:???
>>388
は1時間間隔でなっていますが
秒単位で間隔は一定ではないです。
すみません。

Windows上のアプリはあまり動作増やしたくないなと思っていたんですが
SQLだけでやろうとすると
大変?って感じなのかな
0397NAME IS NULL
垢版 |
2017/07/28(金) 08:06:19.46ID:???
普通データベースの動作を増やさないように工夫すべきなんだけどな
0398NAME IS NULL
垢版 |
2017/07/28(金) 08:09:22.13ID:???
> は1時間間隔でなっていますが
> 秒単位で間隔は一定ではないです。
意味不明だし後出しフラグ立ってるしすまんが抜けさせてもらうわ
0399NAME IS NULL
垢版 |
2017/07/28(金) 09:06:32.50ID:???
最初からずーっと意味不明だったな
0400NAME IS NULL
垢版 |
2017/07/28(金) 11:05:37.51ID:IsxTOLxk
>>396
初心者か?SQLは呪文ではない。
0401NAME IS NULL
垢版 |
2017/07/28(金) 11:06:54.25ID:IsxTOLxk
ロジックを隠蔽すると軽くなる理屈が不明
0402sage
垢版 |
2017/07/28(金) 13:06:18.42ID:UiVRAQM3
mdbファイルをDSNで一般に公開する方法を教えてください。
perl公開ならiisを使えばよいことは分かります。
pdf公開ならftpサーバを使えばよいことは分かります。
mdbファイルはiisを使って公開できるのでしょうか?
iisには接続文字列の設定がありますが意味が分かりませんでした。
odbcad32.exeはネットワーク越しは無理みたいでしたし。
ACCESSというお高いソフトにはmdbファイルを公開できる
サーバ機能が含まれているのでしょうか?
0403NAME IS NULL
垢版 |
2017/07/28(金) 13:09:57.81ID:???
>>402
データベース(ファイル)を一般公開してはいけません
0404NAME IS NULL
垢版 |
2017/07/28(金) 17:22:29.53ID:IsxTOLxk
公開って何?
0405NAME IS NULL
垢版 |
2017/07/28(金) 17:34:26.21ID:???
mdbはファイル共有型だから
そのmdbファイルをファイル共有できるようにすればOK

とレスしてみたけど
そのレベルで一般に公開するのはやめとけ
0406NAME IS NULL
垢版 |
2017/07/28(金) 18:01:40.86ID:IsxTOLxk
答えてる方も何をいってんのかw
0407NAME IS NULL
垢版 |
2017/07/28(金) 19:15:12.26ID:???
共有はいいけど公開はダメってだけでしょ
0408NAME IS NULL
垢版 |
2017/07/28(金) 21:58:07.64ID:???
さすがにイントラでってことなんだろうけど、それでも公開はまずいっしょ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況