0

次のように、データベースの 60 日前 (sysdate-60) のメンバーベースを 1 行で返す既存のクエリがあります。

date -  - - - members
sysdate-60   200.000

次のような結果を得るために、このクエリの複数のクエリの結果を 1 つのクエリに結合したいと考えています。

date - - - -  members
sysdate-60   200.000
sysdate-59   210.000
sysdate-58   220.000

すべてのクエリの日付を手動で編集して「UNION ALL」を使用することでそれを行うことができますが、これは面倒です。より良い解決策を探しています。

「再帰クエリ」に出くわし、これで問題を解決できると思いましたが、ニーズに合わせてカスタマイズできませんでした。あなたはできる?

あなたの答えを楽しみにしています。

編集:

これが私が使用するクエリであり、メンバーの数を取得する他の方法はないと仮定しましょう:<

SELECT sysdate-60 AS date, count(*) AS members FROM members WHERE start_date<sysdate-60 AND end_date>=sysdate-60
4

2 に答える 2

1

次のクエリを使用して、1 から 60 までの数値を生成できます。

select level  from dual connect by level <= 60;

次に、既存のクエリと結合します。

select  'sysdate('|| d|| ')' 
      , sum( case round(sysdate - created) when d then 1 else 0 end)
  from 
        user_objects
      , ( select level d from dual connect by level <= 60)
group by d      
order by 1
;

また

 SELECT sysdate - d, count(*) 
 FROM members 
   , ( select level d from dual connect by level <= 60) 
 WHERE start_date<sysdate-d 
   AND end_date>=sysdate-d 
 group by d
; 
于 2013-08-12T14:53:17.453 に答える
0

これには再帰は必要ありません。カウンターが必要なだけです。

このクエリは、現在の日付で終わる過去 60 日間のリストを返します。

SELECT TRUNC(SYSDATE) - LEVEL + 1 AS TheDate
FROM DUAL
CONNECT BY LEVEL <= 60

リストが昨日の日付で終わる必要がある場合は+ 1、例から を削除してください。

これをメインのクエリに結合すると、それらのクエリをすべて取り除くことができますUNION

于 2013-08-12T15:02:38.030 に答える