0

このような構造になっているレコードを検索しようとしています

trans_Date, customer_age, etc

お客様の年齢は、取引時の年齢です。私がする必要があるのは、現在特定の年齢で、日付範囲の間にトランザクションを行ったすべての顧客を選択することです。

2005 年から 2010 年の間に購入した現在の 20 歳のユーザーのみが必要であるとします。

私はこれを思いついた

select * from trans_logs 
where trans_date between TO_DATE("07/13/2005:00:00","MM/DD/YYYY:HH24:MI" and TO_DATE("01/01/2010:00:00","MM/DD/YYYY:HH24:MI")
and customer_age between 13 and 18

いくつかの正しい結果が得られましたが、2005 年に 18 歳で取引した人も得られました (現在は 25 歳になっています)。

and((customer_age=13 and trans_date BETWEEN TO_DATE('01-JAN-2005:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2005:23:59','DD-MON-YYYY:HH24:MI'))
or (customer_age=14 and trans_date BETWEEN TO_DATE('01-JAN-2006:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2006:23:59','DD-MON-YYYY:HH24:MI'))
or (customer_age=15 and trans_date BETWEEN TO_DATE('01-JAN-2007:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2007:23:59','DD-MON-YYYY:HH24:MI'))
or (customer_age=16 and trans_date BETWEEN TO_DATE('01-JAN-2008:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2008:23:59','DD-MON-YYYY:HH24:MI'))
or (customer_age=17 and trans_date BETWEEN TO_DATE('01-JAN-2009:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2009:23:59','DD-MON-YYYY:HH24:MI'))
or (customer_age=18 and trans_date BETWEEN TO_DATE('01-JAN-2010:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2010:23:59','DD-MON-YYYY:HH24:MI')) )

しかし、右括弧がないというエラーが返されます。1.何が欠けていますか? 2. これを行うためのより効率的な方法はありますか?

編集:2番目の日付とその他の書式設定を忘れました

4

1 に答える 1

1

あなたが持っている情報を考慮して、現在の年齢を計算する必要があります。アイデアは、トランザクションからの年数を年齢に追加することです。私は Oracle の日時関数が得意ではありませんが、次のように動作するはずです。

select tl.*, 
from trans_logs tl
where customer_age + (SYSDATE- trans_Date)/365 = 20

生年月日と取引日の関係に応じて「20」前後の人が得られるため、これは概算であることに注意してください。

できれば生年月日も入れたほうがいいです。生年月日を聞くよりも年齢を聞くほうが簡単かもしれないことは理解していますので、選択肢がないかもしれません。

于 2012-07-13T16:08:58.990 に答える