如何从查询中提取数据,然后通过提取的数据进行分组

时间:2016-06-24 15:11:30

标签: oracle

我有一个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天的结果数据中心

所以它应该是这样的。客户端列的前一个文本太独特,因此我想提取下面的模式,然后列出它们。

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 个答案:

答案 0 :(得分:0)

两个版本:一个基于sysdate,从运行日期开始工作,第二个基于文字过滤日期......

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'))