2017-05-24 12 views
0

私は助けが必要です。 SQLにおける私のクエリの目標は、2つの別々のクエリ(結果A + B)の結果を使用して、特定のガレージ内の1つの変数(車)の頻度を一定期間計算することです。あるテーブルのすべてのレコードと別のテーブルのすべてのレコードを比較する

結果(結果A)の第1のセットは、そのそれぞれの到着日と終了日とのガレージに車のリストを提供する(各レコードは、一台の車、1到着日、および1つの出口日付です)。 2番目の結果セットは、日付として@PeriodStartDateを使用し、日付として@PeriodEndDateを使用するCTE再帰です。結果(結果B)には、開始日から終了日までのすべての日付が提供されます。

ここから、結果Aのすべてのレコードを取得し、それを結果Bのすべてのレコードと比較して、結果Bの最初のレコード/日付が1)> =到着日、および2)終了日より<。例えば。 2016年2月4日から2016年3月15日までのガレージに車があり、期間の開始日と終了日が2016-01-01から2016-03-01である場合は、この車の記録を取りたいと思います。私が欲しい、2016年3月1日に2016年1月1日からすべての日付への到着と終了日付を比較して、この演習が行われた後、プロセスが結果A.

にすべての車/レコードに対して繰り返してい2016年1月1日から2016年3月1日までのガレージ内に存在していた自動車の量を求めるクエリ。

これまでのところ、AとBの結果のクエリが実行されましたが、次の部分の開始方法については正直なところ考えていません。

は、あなたが変更される可能性期間が

を開始した後、これが終了した期間の前に到着し、終了した車の合計数を返します、 マイキー

+1

どの[DBMS](https://en.wikipedia.org/wiki/DBMS)を使用していますか? Postgres?オラクル? –

+0

質問を編集し、達成したいことを説明する(簡略化した)データを提供してください。また、使用しているデータベースにタグを付けます。 –

答えて

0
Select Count(*) AS TotalCars, B.PeriodStart, B.PeriodEnd 
FROM A 
JOIN B 
ON A.Arrival <= B.PeriodEnd 
AND A.Exit > B.PeriodStart 
Group By B.PeriodStart, B.PeriodEnd 

ありがとう

AND A.Exit > PeriodStart 

To

ISNULL(A.Exit, Getdate()) > PeriodStart 

最後にまだ出ていない車をキャプチャするには

+1

ねえ。迅速な返信をありがとうございました。私はあなたの提供したものを私のクエリの基礎として取り上げました(これは現在動作しています)。私は、フィードバックのための – MikeyC

+0

@MikeyC感謝をあなたと同じことをやった、とWHERE句を追加しました(WHERE「日付結果Bからの」> =到着日+変数と「結果Bからの日」<終了日付)とBに参加しました、それが助けてくれてうれしい – MarkD

関連する問題