2016-06-24 36 views
0

データの最後に特定の日付パターンが付加されたすべての行を抽出する必要があるOracleテーブルがあります。問題はない。クエリからデータを抽出し、抽出したデータをグループ化する方法

私が悩んでいるのは、どのように再帰的に、または別の方法で次の30日間の結果を得て、各日付範囲ごとにカウントを表示できるかです。その中

サンプルデータテーブルには、次のとおりです。

Client (Column) 
blah1_Client1_blah1_RECLAIM20160725 
blah2_Client2_blah2_RECLAIM20160726 
blah3_Client3_blah3_RECLAIM20160727 
blah4_Client4_blah4_RECLAIM20160728 
... 
... 
... 
blahN_ClientN_blahN_RECLAIM20160731 

DataCenter (Column) 
Datacenter1 
Datacenter2 
Datacenter3 
Datacenter4 
.. 
.. 
.. 
DatacenterN 

私は私のクエリは私に沿ってクライアントの列に抽出された日付に基づいて、次の30日間のクライアントの結果を与える持つことができると期待していますどのデータセンターに属しているのか、そして1人のデータセンターあたりのクライアントの数はどれくらいですか

です。クライアント列の上記のテキストはあまりにもユニークなので、私は以下のパターンを抽出してリストしたいと思います。

DataCenter Client   Count 
Datacenter1 RECLAIM20160728 10 
Datacenter2 RECLAIM20160727 7 
Datacenter3 RECLAIM20160725 15 
Datacenter4 RECLAIM20160726 23 

私のクエリは次のよう今日は次のとおりです。

SELECT Datacenter, Client 
FROM Table 
WHERE volume LIKE '%RECLAIM201607%' and ROWNUM < 5; 

または

SELECT Datacenter, COUNT (Datacenter) 
FROM Table 
WHERE volume LIKE '%RECLAIM201607%' 
GROUP BY DataCenter; 

クエリ2は、より多くの可能性が高い私の要件に近い整列一つであるが、それは日付が表示されませんしたがって、データセンターごとに1日に何回Reclaimが実行されるのか分かりません。

何か助けていただければ幸いです。ありがとう!

答えて

0

二つのバージョン:SYSDATEに基づくもの、実行の日から作品、文字通りのフィルタ日付に基づいて、第2 ...

SELECT 
     DATACENTER, 
     SUBSTR(CLIENT, INSTR(CLIENT,'_RECLAIM20')) AS CLIENT, 
     COUNT(CLIENT) 
FROM TABLE_CLIENTS 
WHERE TO_DATE(SUBSTR(SUBSTR(CLIENT, INSTR(CLIENT,'_RECLAIM20')), 9), 'YYYYMMDD') > SYSDATE 
    AND TO_DATE(SUBSTR(SUBSTR(CLIENT, INSTR(CLIENT,'_RECLAIM20')), 9), 'YYYYMMDD') <= SYSDATE + 30 
-- WHERE TO_DATE(SUBSTR(SUBSTR(CLIENT, INSTR(CLIENT,'_RECLAIM20')), 9)) > DATE('20160701') 
-- AND TO_DATE(SUBSTR(SUBSTR(CLIENT, INSTR(CLIENT,'_RECLAIM20')), 9)) <= DATE('20160701') + 30 
GROUP BY 
DATACENTER, 
SUBSTR(CLIENT, INSTR(CLIENT,'_RECLAIM20')) 
関連する問題