0

私はできる限りこれを説明しようとします。

ケースの最初のレター送信日を入力する必要があるという要件があります。

Case     |   Letter_Sent_Date
1234     |   05/29/2012
1234     |   05/30/2012
1234     |   06/01/2012

以下の 'WHERE' 条件がこのケースをレポートに表示されないようにする Oracle SQL を作成するにはどうすればよいですか?

WHERE Letter_Sent_Date between '01JUN2012' and '30JUN2012'

最初に送られた手紙は 6 月ではなかったので、このレポートには表示せず、5 月のレポートを実行したときにのみ表示されるようにしたいと思います。

4

4 に答える 4

2

これには MIN ウィンドウ/分析関数を使用します。

select case_id, letter_sent_date
from (select case_id, letter_sent_date,
             min(letter_sent_date) over (partition by case_id) as mindate
      from t
     ) t
where mindate between '01JUN2012' and '30JUN2012'

これにより、最初の手紙がいつ送信されたかに基づいて、すべてのケースが除外されます。行を削除したいだけなら、AriStorm はそれに答えました。

于 2012-09-12T20:03:39.760 に答える
1

1 つのクエリで最初の文字を取得し、その上に where を記述して、日付範囲に基づいてフィルター処理できます。

ケースと最初の文字を取得するには..

select case_id,
       letter_sent_date
  from (
    select case_id,
           letter_sent_date,
           rank () over (partition by case_id order by letter_sent_date asc) rnk
      from case_table
       )
  where rnk = 1

指定した日付に最初の手紙が送信されたケースのみを取得するには..

select case_id,
      letter_sent_date
 from (
    select case_id,
           letter_sent_date,
           rank () over (partition by case_id order by letter_sent_date asc) rnk
      from case_table
      )
 where rnk = 1
   and letter_sent_date between to_date('01-JUN-2012','DD-MON-YYYY) 
                            and to_date('30-JUN-2012','DD-MON-YYYY')
于 2012-09-12T19:54:59.813 に答える
0

あなたが探しているものを私が理解している場合:

ケース、letter_sent_date {、およびテーブルから必要なその他のフィールドを選択}
テーブル名から
ここで、'01-jun-2012' と '30-jun-2012' の間の letter_sent_date

これは次に出力されます

ケース | letter_date_sent
1234 | 2012/06/01

これがあなたが探しているものでない場合は、リクエストを明確にしてください:)

于 2012-09-12T19:55:57.157 に答える
0

または古い学校の GROUP/HAVING:

 SELECT case_id, MIN(letter_sent_date)
   FROM case_table
  GROUP BY case_id
 HAVING MIN(letter_sent_date) BETWEEN '01-JUN-2012' and '30-JUN-2012'
于 2012-09-13T08:57:48.617 に答える