• ベストアンサー

【SQL】日付の取得(ある日付を省いて指定日数を取得したい)

Aテーブルの日付フィールドを見て、引数の日付から過去7日間のデータを取得したいのですが、 その際に Bテーブルの日付と取得不可フラグを参照し、取得しようとしている日付(引数から過去7日間)に取得不可フラグ=1がたっていれば、Aテーブルの日付7日間のカウントに含めない としたいのですが、その判断を1回のSQLで取得することは可能でしょうか。 MINUSを使用しようとしましたが上手くいきませんでした。 お手数ですが、ご回答いただけますでしょうか。 宜しくお願いします。

  • goot
  • お礼率68% (13/19)
  • Oracle
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • thatsthat
  • ベストアンサー率55% (15/27)
回答No.2

「カウントに含めない」という事は・・・ こういうイメージでしょうか? select データ from A where 日付 in (  select 日付 from (   select 日付 from B   where 取得不可フラグ<>1 and 日付<(引数の日付)   order by 日付 desc)  where rownum<7) やはりBに全ての日付が入っている前提です。

goot
質問者

補足

ありがとうございます。 更に一つ確認させてください。(オラクル実行環境がないので。。。) select データ from A where A日付 in (  select B日付 from (   select B日付 from B   where 取得不可フラグ<>1 and B日付<(引数の日付)   order by B日付 desc)  where rownum<7) 日付の区別ですが、上記の認識で宜しいでしょうか。 (A日付=Aテーブルの日付  B日付=Bテーブルの日付) お手数をおかけしますが、ご回答いただけますでしょうか。

その他の回答 (2)

  • thatsthat
  • ベストアンサー率55% (15/27)
回答No.3

>日付の区別ですが、上記の認識で宜しいでしょうか。 はい。そのつもりでした。 分かりにくかったらすみません。 実際にSQLを書く際には、「A.日付」や「B.日付」 のような形で書かなくても大丈夫だと思います。

goot
質問者

お礼

ありがとうございます。 非常に困っていたので大変助かりました。

  • yskmtym
  • ベストアンサー率11% (1/9)
回答No.1

Bテーブルには、全日付のレコードがあるのでしょうか? 全日付のレコードがあるのなら、単純に 結合条件  ATBL.日付=BTBL.日付 抽出条件  BTBL.フラグ<>'1'  ATBL.日付 > 引数日付-7 という感じの条件指定すれば抽出できませんか?

goot
質問者

お礼

Bテーブルには全日付のレコードがあります。 ご回答いただきありがとうございます。 7日間(カウント)がとりたいので ATBL.日付 > 引数日付-7 という条件ではないのですが、 大変参考になりました。

関連するQ&A

  • 翌営業日までの日数をSQLで求めたい

    日付と休日フラグの2つのフィールドを持つ カレンダーテーブルを使用して 翌営業日までの日数を求めるSQLを教えていただけ ますでしょうか。 使用環境はaccess2007です。 カレンダーテーブル date flg ---- --- 4/1 0 → 3(翌営業日まで3日間) 4/2 1 → 2(翌営業日まで2日間) 4/3 1 → 1(翌営業日まで1日間) 4/4 0 → 1(翌営業日まで1日間) 4/5 0 → 1(翌営業日まで1日間) よろしくお願いいたします。

  • SQLの日付+その他の取得

    SQLで和暦と日付の変換後の表示を行いたいです。 フィールド名Aに6桁の数字(199811など)が入っていて これを(和暦)yy年mm月と表示させたいのですが、 SQLで変換可能なのでしょうか? フィールド名A,テーブル名B,(必要であれば)フィールド名Aの別名Cとして、 SELECTの構文を教えていただきたいです。

  • 連続値を取得するクエリ

    T-SQLで、テーブルを参照せず、1から30までの雨に連続する値のをもつ30行を取得するには、どのようなクエリになりますでしょうか? やりたいことは、今日から過去30日間の集計データを表にするということで、そのために、今日から過去30日の日付の行をもつ日付列を用意して、Left Joinしようとしています。 よろしくお願いします。

  • SQL UPDATE 文 GroupByの値を更新したい

    SQLの UPDATE文について質問させていただきます。 テーブル内のデータを日付と時間で GroupBy して カウント求めています。 求めた値(カウント)を、日付をキーにして同じテーブル内のフィールドに更新するSQLを作成したいと考えています。 GroupByして、カウントを求めることはできるのですが、 どうしても、UPDATE文を実行させることができません。 この処理は、SQLで行うことはできるのでしょうか? 下記に、UPDATE前と後のテーブルデータを記載しています。 日付   時刻 20090101 0:00  20090101 0:00 20090102 0:00 20090102 0:00 20090102 1:00 20090103 2:00 ↓ 日付   時刻 カウント 20090101 0:00 2 20090101 0:00 2 20090102 0:00 2 20090102 0:00 2 20090102 1:00 1 20090103 2:00 1 よろしくお願いいたします。

  • 1個のSQL分で2種類以上の件数値を取得する

    SQL分の記述で質問なんですが、 データベース上に日付、時間、フラグと言う項目があります。 同一の日付、時間のものは数件ずつあります。 フラグは"b"と"1"があります。 このデータの日付・時間辺りの件数と+フラグが"1"の件数を同時に取得するSQL分はかけますでしょうか? 別々ならば、 SELECT DATE,TIME,COUNT(*) AS KENSU1 FROM W_TABLE GROUP BY DATE,TIME ORDER BY DATE,TIME と SELECT DATE,TIME,COUNT(*) AS KENSU2 FROM W_TABLE WHERE FLG="1" GROUP BY DATE,TIME ORDER BY DATE,TIME でかけると思うのですが、 1個のSQL分で記述は可能でしょうか? 処理結果を 05/02/23 12:00 10 5 05/02/24 10:00 12 3 (日付・時間・件数・フラグ="1"の件数  見たいに取得したいのですが..

  • テーブルの統合・日付別集計

    Accessを使ってあるデータの送信履歴を記録しており 日付別の統計を取りたいと考えています。 AテーブルとBテーブルは以下のような構造をしています。  [id]項目ID(数値型)  [senddate]日付を表すフィールド(日付/時刻型)  [endflg]終了フラグ(数値型) endflg=1を条件にして Aテーブル・Bテーブルを統合した日付別統計をとるには どのようなSQL文を書けばよいのでしょうか?

  • SQLでの日付比較

    いつもお世話になっております。 SQL文に関して質問ですが、テーブルに年と月が別に入っているフィールド(4桁、2桁の数値型)があり本日から3年以内のものを抽出するにはどうやって書くのがいいのでしょうか? 日付のフィールドは無いので計算するのは月だけでいいのですが・・・。 よろしくお願いいたします。

  • ある条件でのSQLの取得方法について

    以下の条件でのSQLのデータの取得方法が分かりません。 2つのテーブルがあるとします。 ・テーブルA キー   項目1 10     X 20     Y ・テーブルB キー  項目2  項目3 10     5    C 10     6    D 12     6    E ここで取得する条件として ■テーブルAにあるのは、必ず取得します。 ■テーブルAのキーとテーブルBのキーは繋がり、繋がったテーブルBの情報は  別レコードとして取得します。 ■テーブルAのキー1つに対して、テーブルBのキーは無いかも知れないし、  複数件あるかも知れません。  無い場合はテーブルAの情報のみを出力し、複数件ある場合はその全てを出力します。 ■テーブルBの項目2が同じ値のデータがある場合、テーブルBを出力したレコードと  同じレコードに、項目2が同じデータの情報を出力します。  項目2が同じデータが無い場合はこの情報は出力しません。  項目2が同じ値のデータは最大2件しかありません。 上記の例の場合に出力したい結果 ・出力テーブルC キー  フラグ   項目1  項目2  項目3   項目2が同じキー  項目2が同じ値 10  テーブルA   X 10  テーブルB         5    C 10  テーブルB         6    D        12            E 20  テーブルA   Y (テーブルC のフラグとは、テーブルAの情報かテーブルBの情報かを示します) これを出来ればSQL、出来なければPL/SQLで取得したいのですが どちらの場合でも取得の方法に悩んでいます。 どのような方法で取得できるのでしょうか?

  • SQLの取得方法について

    SQLの取得方法を考えてます。 テーブルA キー番号 利用フラグ  内容   1      1     りんご   2      0     みかん   3      0     なし   4      1     すいか   5      1     ぶどう 上記のような5件のデータがあるとします。 出力する時は、1件(縦もち=>横もち)にします。 キー番号が小さい順で、利用フラグが1の物を出力します。 利用フラグが1の物は最大でも3件しかありません。 その為、出力テーブルも3件分しかありません。 利用フラグが1の物が3件無い場合は、ある分だけ出力します。 上記データの時の出力結果想定 テーブルB キー番号1 内容1  キー番号2 内容2  キー番号3  内容3   1     りんご     4     すいか    5     ぶどう これをどのようなSQLで実現できるでしょうか? 方法がよくわかりません。

  • Mysqlで最新の日付を持つデータを取得するSQLを書きたい

    Mysqlで最新の日付を持つデータを取得するSQLを書きたい 管理テーブル(MySql) 日 付|食べたもの ----------- 4月1日|パン 4月2日|ご飯 4月3日|パン 4月4日|パン 4月5日|ご飯 4月6日|カレー と言ったデータがあったとき パンを食べた最新の日付を取得したいとき どんなSQLを書けばいいのでしょうか? SELECT * FROM 管理テーブル WHERE 食べたもの = パン ORDER BY 日付 DESC LIMIT 1; とすれば、思うような結果が出ましたが LIMITは使いたくありません また 日 付|食べたもの ----------- 4月4日|パン 4月5日|ご飯 4月6日|カレー 上記のように 食べたのもそれぞれの最新の日付を表示して 一覧にしたいとき(表現ベタですみません) どんなSQLになりますか?

    • ベストアンサー
    • MySQL