2016-10-24 13 views
1

ご挨拶はすべてStackを知っています。Oracle SQL:動的時間枠計算

私はちょっとしたピクルスに入っています。私は、ハイブの心の中でいくつかの友好的な援助を期待しています。

登録日(テーブルの列に格納されている)と昨年9月の最初の日の差を返すクエリを作成する必要があります。

たとえば、登録日が14-07-2010のレコードに対してクエリが今日(24-10-2016)実行されていたと仮定した場合、スクリプトは14-07-2010と01-09- 2016

しかし、昨年の8月の終わりまでに、たとえば12-08-2016に同じクエリを実行した場合、スクリプトで14-07-2010と01-09- 2015年

日付間の差異を計算するのは問題ありません。これは、「昨年9月の最初の日」をクエリを取得して、私を引きつけている計算に戻すプロセスです。

入力があれば幸いです。

ありがとう=)

答えて

5

このアプローチを試してみてください:

現在の日付に4ヶ月

を追加

減算4ヶ月〜1年の最初にこの日付を切り捨てるため再び

Add_Months(Trunc(Add_Months(SYSDATE, 4), 'year'), -4) 
+0

感謝シンプルで効果的なソリューション! – RDG

0

希望する場合があります。

WITH T AS (SELECT TO_DATE('14-07-2010','DD-MM-YYYY') REG_DATE, 
        SYSDATE EXEC_DATE 
      FROM DUAL) 
SELECT CASE WHEN TO_CHAR(EXEC_DATE,'MM') >= 9 
       THEN ADD_MONTHS(TRUNC(EXEC_DATE,'YEAR'),8) 
      ELSE ADD_MONTHS(TRUNC(ADD_MONTHS(EXEC_DATE,-12),'YEAR'),8) 
     END 
     - REG_DATE AS DIFF 
FROM T;