アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のような処理を行いたいと思いますが
SQL文の作成方法を御教授下さい。

【時間DB】
YEARMONDAY,HOUR,FLG,DATA
-----------------------------
20050528    1 1 10
20050528    2 1 20
20050528    3 1 30
20050528    4 1 40
.
.
.
20050528   22  1 40
20050528   23  1 50
20050528   24  1 60

【日DB】
YEARMONDAY,FLG,DATA
-----------------------------
20050528     1  250


処理内容:指定された日付で日DBの作成を行う。
抽出条件:フラグが全て等しい場合はその値を取得
      :フラグが一致しない場合は0を取得

上記の場合,SQL文で抽出可能でしょうか?

以上,よろしくお願い致します。

A 回答 (4件)

フラグが揃わない時の、フラグは何を持ってきたいのか


判りませんが・・
こんな感じで似たような結果になるかと。

select
YEARMONDAY,
minflg FLG,
case when minflg=maxflg then sumdata else 0 end DATA
from
(
select YEARMONDAY,min(FLG) minflg,max(FLG) maxflg.sum(DATA) sumdata
from 時間DB
group by YEARMONDAY
)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

上記のSQLを参考にしてみたところ,
うまく抽出することができました。

本当に,ありがとうございました。

お礼日時:2006/05/27 19:20

表現がよく理解でき無い箇所が多いですが、


精一杯意訳しますと、、、

>指定された日付で「日DB」の作成を行う。
「指定」とはWHRER句で別途直に入れる条件

「日DBの作成を行う」とはcreate database やcreate tableで枠を作成するのではなく、
既に作成済のテーブル「日DB」に対しデータを出力するという事。

出力するのは「時間DB」の指定条件内で項目「DATA」を合計して1件。
ただし、項目「FLG」が指定条件内に2種類以上存在する場合は項目「FLG」を0にして出力。

input:時間DB
output:日DB

日DB.YEARMONDAY = 時間DB.YEARMONDAY = 指定した条件
日DB.FLG = 時間DB.FLG(但し、全部が一致しない場合は0)
日DB.DATA = 時間DB.DATAの合計

で、あってます?

『時間DBからのデータ抽出』と『抽出したデータを日DBに出力』するのは1回のSQLでやりたいのですか?
それともとりあえず時間DBからのデータ抽出部分だけわかればいいのですか?
    • good
    • 0
この回答へのお礼

何度も申し訳ありません。m(__)m
上記の説明で間違いありません。
『時間DBからのデータ抽出』部分が知りたかったです。
無事,解決することができました。

ご迷惑をおかけしたしまして申し訳ありませんでした。
ありがとうございました。

お礼日時:2006/05/27 19:33

フラグが全て等しいは、


日付で絞った件数と
日付とフラグで絞った件数と
を比較すれば分かります。

「その値」とは何を指しますか?
どの項目を求めたいのか分からないのでSQLの書きようがありませんが、SQLで書けない事はありません。

この回答への補足

早速の回答ありがとうございます。
説明不足で申し訳ありませんでした。

「その値」とは,FLGの値は現在の所1~4の値が入って
くる予定です。
その為,日付で絞った際に1時~24時のレコードがすべて
「1」だった場合は「1」を「2」の場合は「2」というように取得できたらと思っています。

フラグを抽出しないのであれば,

SELECT SUM(DATA) FROM 時間DB
WHERE YEARMONDAY = 20050528
AND HOUR >= 1 AND HOUR <= 24

でよいのでしょうが,この文に
FLGを抽出する条件をつける方法がわかりません。
よろしくお願いします。

補足日時:2006/05/27 15:15
    • good
    • 0

>フラグが全て等しい場合


が、データ全件(同一日)の事を指しているのであればSQLでは無理です。

このような場合は、PL/SQLか、Accessなどで更新プログラムを作る必要があります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!