質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

852閲覧

[SQL]レコード単位で抽出する条件を変更する方法

ryo_is

総合スコア11

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2019/05/17 09:41

編集2019/05/17 10:10

前提・実現したいこと

以下のようなデータを持つテーブルがあったとして、
各レコードにおける「取引日-2営業日以内のレコード数」をそれぞれカウントしたいのですがSQLが思い浮かびません。

基準日取引キー取引日取引日 - 2営業日
20190517123452019051720190515
20190516234562019051620190514
20190515345672019051420190510
20190514456782019050920190507

↓↓

作り出したい結果表

基準日取引キー取引日取引日 - 2営業日count(2営業日以内の取引数)
201905171234520190517201905152
201905162345620190516201905142
201905153456720190514201905101
201905144567820190509201905071

基準日20190517のレコードの「取引日-2営業日」は20190515なので取引日が2019051520190517のレコードを、
基準日20190516のレコードの「取引日-2営業日」は20190514なので取引日が20190514
20190516のレコードを、
基準日20190515のレコードの「取引日-2営業日」は20190510なので取引日が2019051020190514のレコードを、
基準日20190515のレコードの「取引日-2営業日」は20190510なので取引日が20190510
20190514のレコードをカウントするといった形です。

レコード単位で抽出条件が異なってしまうため、どのようにSQLを組めばいいかわからず…。

どなたかご教示いただけると幸いです。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2019/05/17 10:02

基準日20190514の取引日が上下の表で異なっています
ryo_is

2019/05/17 10:10

失礼いたしました、取り急ぎ修正済みです。
ryo_is

2019/05/20 06:17

Orlofskyさん ご提案ありがとうございます。 次回の質問以降、バージョン等の情報を記載するようにさせていただきます。
guest

回答2

0

相関サブクエリーを使用する場合

SQL

1select * 2 ,(select count(*) from テーブル where 取引日 between t1.取引日 and t1.取引日_2営業日) 3from テーブル t1

投稿2019/05/17 12:06

sazi

総合スコア25188

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryo_is

2019/05/20 06:17

ご回答ありがとうございます。 ご提案いただいたSQLではどうも集計がうまくできず… また質問させていただいた際に回答いただければ幸いです。 よろしくお願い致します。
sazi

2019/05/20 06:21 編集

うまくできないとは、結果が違うという事ですか? 採用するかどうかは別にして、この機会に相関サブクエリーも理解されていた方が良いと思いますけど。
ryo_is

2019/05/20 06:38

>saziさん はい、ご教示いただいたSQLではcountの結果がいずれも0となってしまい…。 相関サブクエリーについては勉強させていただいているところになります。
guest

0

ベストアンサー

ざっくりこう

SQL

1create table tbl (kijunbi date,torihikikey int,torihikibi date,torihikibi_hiku2 date); 2insert into tbl values 3('2019-05-17',12345,'2019-05-17','2019-05-15'), 4('2019-05-16',23456,'2019-05-16','2019-05-14'), 5('2019-05-15',34567,'2019-05-14','2019-05-10'), 6('2019-05-14',45678,'2019-05-09','2019-05-07'); 7 8select t1.torihikibi,count(*) as cont 9from tbl as t1 10left join tbl as t2 on t2.torihikibi between t1.torihikibi_hiku2 and t1.torihikibi 11group by t1.torihikibi 12order by t1.torihikibi desc

命題が取引日ベースに集計をしているので基準日のデータを拾うことは
整合性が取れないです

投稿2019/05/17 10:06

yambejp

総合スコア114833

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryo_is

2019/05/20 06:15

確認が遅くなってしまい申し訳ございません。 ご回答ありがとうございます。 ご教示いただいたSQLで実現できることを確認させていただきました。 BETWEEN句を使って結合することで可能なのですね。大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問