0

我有一个现有查询,它在一行中返回 60 天前 (sysdate-60) 我的数据库的成员库,如下所示:

date -  - - - members
sysdate-60   200.000

我想将这个一个查询的多个查询的结果合并到一个查询中,以获得这样的结果:

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 回答