SQL2005でクエリを走らせて調査したいので教えてください
●取引データ●
------------------------------
企業 取引開始日 取引終了日
------------------------------
A 20110610 20110612
A 20110701 20110710
B 20110401 20110403
B 20110408 20110421
B 20110701 20110701
とデータがあった場合、今回の取引開始日と前回の取引終了日を比較して3週間以内かどうかの調査をしたいのですが、クエリで一発で出す方法がないでしょうか?
検索して調査した結果、相関サブクエリで行えるのでは???と思い試しましたが構文がイケてないようで、思ったように出てきません。
相関サブクエリの意味があまり理解できないので助言をお願いいたします。
件数が多いので、とりあえずA企業だけでのクエリで走るかどうか調査したいので企業を限定しました
select d1.取引開始日, d1.取引終了日
from 取引データ as d1, 取引データ as d2
where
d1.企業 = 'A'
and
d2. 取引開始日 = (select min(d3.取引開始日)
from 取引データ as d3
where d3.取引開始日 > d1.取引終了日 + '21')
出力したい結果ですが
---------------------------------------------------
企業 取引開始日 取引終了日 ★経過日 ★3週間以上
---------------------------------------------------
A 20110610 20110612
A 20110701 20110710 18
B 20110401 20110403
B 20110408 20110421 5
B 20110701 20110701 70 ○
対処法をご教示いただきますようどうぞ宜しくお願いいたします。
No.4ベストアンサー
- 回答日時:
No.1です。
インラインビューには別名をつけないといけないということかもしれません。
select
企業
,取引開始日
,取引終了日
,取引開始日 - 前回取引終了日 as 経過日
,case when (取引開始日 - 前回取引終了日) > 21 then '○' else null end as "3週間以上"
from
(select
企業
,取引開始日
,取引終了日
,(select max(取引終了日) from 取引データ B
where b.企業 = a.企業 and b.取引終了日 < a.取引開始日) as 前回取引終了日
from 取引データ A) as 取引データ;
などとして試してみてください。
No.3
- 回答日時:
SQLを考える場合は理論を組み立てないと、
「たまたまできた」に期待するしかなくなります。
【理論】
1、自レコードの取引開始日より小さい取引終了日を
持つデータ集合を作る。
2、上記データ集合中直近、つまり取引終了日の
最大値を求める。
3、自レコードの取引開始日とデータ集合の
取引終了日の最大値との差が経過日数である。
とりあえず3週間経過かどうかは別として、経過日数を
求めるSQLは次のようになるかと思います。
SELECT A.企業,A.取引開始日,A.取引終了日,
CASE
WHEN Max(B.取引終了日) IS NULL THEN NULL
ELSE DATEDIFF(day,Max(B.取引終了日),A.取引開始日)
END AS 経過日数
FROM 取引データ A LEFT OUTER JOIN 取引データ B
ON A.企業=B.企業 AND A.取引開始日>B.取引終了日
GROUP BY A.企業,A.取引開始日,A.取引終了日
インデントに漢字空白を使っています。コピペしただけでは
エラーになるので、漢字空白を半角にしてください。
くわしい説明をありがとうございます。
A企業内での取引開始日と前回取引終了日を比較していき、経過日数を右へ出したいのですが、イマイチループ処理がわかっていませんでした。
クエリを走らせたのですが、思ったような数字がでませんでした。
一覧はそのままデータとして表示しておきたいのですが、穴空きになってしまいます。
No.2
- 回答日時:
確認できる環境が手元にないのでミスってるかもですが、
こんな感じでいけませんかね?
select d1.企業, d1.取引開始日, d1.取引終了日,
datediff(day, d1.取引開始日, d1.取引終了日) as ★経過日,
case when
select top 1 d2.取引終了日 from 取引データ as d2
where d1.企業 = d2.企業
and d1.取引開始日 > dateadd(week, 3, d2.取引終了日)
is null then '' else '○'
end as ★3週間以上
from 取引データ as d1
order by d1.企業, d1.取引開始日
サブクエリ部分はcountにして0件かどうかを判断してもいいですが、
たぶんこのほうがレスポンスはいいはず。
早々にありがとうございました。
2点エラーが出ます。
メッセージ156 レベル15 状態1
キーワード'select'付近に不適切な構文があります
select top 1 d2.取引終了日 from ・・・
このtop 1 ってのを top01() top1() にしてみましたが駄目でした。
メッセージ156 レベル15 状態1
キーワード'is'付近に不適切な構文があります。
is null then '' else '○' ここに問題ありでしょうか・・・。
No.1
- 回答日時:
サブクエリで前回の取引終了日を取得して比較すればいいのではないでしょうか。
たとえばこんな感じで。
select
企業
,取引開始日
,取引終了日
,取引開始日 - 前回取引終了日 as 経過日
,case when (取引開始日 - 前回取引終了日) > 21 then '○' else null end as "3週間以上"
from
(select
企業
,取引開始日
,取引終了日
,(select max(取引終了日) from 取引データ B
where b.企業 = a.企業 and b.取引終了日 < a.取引開始日) as 前回取引終了日
from 取引データ A);
動作確認はしていません・・・
早々にありがとうございました。
ところが、最終行のところで
from 取引データ A);
でエラーが出ます。
メッセージ102 レベル15 状態1
')'付近に不適切な構文があります。
となってしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】先月分の取得ができない理由が分かりません。 2 2022/04/24 11:16
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- 消費税 インボイス経過措置 3 2023/05/27 11:32
- Access(アクセス) アクセス フォームの自動入力 1 2023/03/20 00:18
- 経済学 環境経済学の問題です。 企業1と企業2が排出量取引を「しないときと、するとき」を比較し、排出量取引を 1 2023/07/10 15:18
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- 先物取引 長期国債先物オプション取引 ・5/10に取引できる限月は6、7、8、9月の4限月である。 →国債先物 1 2022/05/31 20:31
- 銀行・ネットバンキング・信用金庫 銀行の入出金明細の AP(T-LIFE とは何? 2 2022/11/13 21:44
- Excel(エクセル) エクセル2019の関数を教えてください。 8 2022/12/16 12:45
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
見積書の提出を拒否しても、商...
-
株式投資だけで、いわゆる「食...
-
非居住者で、居住者なりすまし
-
「商権」ってなんですか?
-
「内口銭」について教えてください
-
新規開拓ってどういう意味ですか?
-
赤字で販売は違法?
-
仕入先に圧力をかけられていま...
-
宝くじの取り扱いについて
-
日用品雑貨メーカーですが、自...
-
証券外務員登録をしている社員...
-
信用保証協会が設定する根抵当...
-
系列取引って何ですか?
-
アンケートに対する謝礼(景表...
-
取引でトラブル!?
-
二酸化炭素排出権取引
-
ビジネスマナー 取引先の方の...
-
企業のHPに記載されている「...
-
理事の利益相反取引について
-
抵当権の担保額はどれくらいが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
見積書の提出を拒否しても、商...
-
「商権」ってなんですか?
-
この手紙が届きました。 もしこ...
-
新規開拓ってどういう意味ですか?
-
「内口銭」について教えてください
-
赤字で販売は違法?
-
企業のHPに記載されている「...
-
商法 介入取引(つけ商売)に...
-
一般向け資料に取引先会社名一...
-
証券外務員登録をしている社員...
-
実印を押した書類を紛失されました
-
GDPと中古取引について
-
非居住者で、居住者なりすまし
-
ビジネスマナー 取引先の方の...
-
歩引行為を受けており,困って...
-
「成約」という語句の読み方
-
印紙税法施行令(26条)営業者...
-
【不正競争防止法】取引先から...
-
取引先から打ち切られる!?
-
取引開始時に預かり金をいただ...
おすすめ情報