Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql中以前日期的计算_Sql_Oracle - Fatal编程技术网

sql中以前日期的计算

sql中以前日期的计算,sql,oracle,Sql,Oracle,我需要找到每天的年龄,但我需要在一个查询中找到以前所有日期的年龄 例如: -- For SYDATE: SELECT SYSDATE AS DATE, ((SYSDATE)- create_time) as Age FROM items -- For (SYDATE-1): SELECT (SYSDATE -1) AS DATE, ((SYSDATE-1)- create_time) as Age FROM items -- For (SYDATE-2) AND SO ON ----

我需要找到每天的年龄,但我需要在一个查询中找到以前所有日期的年龄

例如:

-- For SYDATE:
SELECT  SYSDATE AS DATE, 
((SYSDATE)- create_time) as Age
FROM items

-- For (SYDATE-1):
SELECT  (SYSDATE -1) AS DATE, 
((SYSDATE-1)- create_time) as Age
FROM items

-- For (SYDATE-2) AND SO ON ----:
SELECT  (SYSDATE-2) AS DATE,
((SYSDATE - 2)- create_time) as Age
FROM items
是否有任何方法可以自动计算以前的日期并给出输出

最终输出应如下所示:

Date_in     Age
24/JUN/15   20
23/JUN/15   19
22/JUN/15   18

基本上,这个想法是使用一个内联视图,列出
项的所有日期。我假设每天都有一个创建日期

然后对items表使用笛卡尔乘积联接

您可能需要进行更多的筛选,但不确定您希望得到的确切结果


在上,我使用了这个模式

CREATE TABLE items
( 
  item_id number,
  create_time date
);

insert into items values (1, sysdate-3);
insert into items values (2, sysdate-2);
insert into items values (3, sysdate-1);
insert into items values (4, sysdate);
来测试此查询,这可能是您所要求的

select 
b.system_date as date_in, (b.system_date-a.create_time) as age, a.item_id, a.create_time
from 
(select distinct create_time as system_date from items) b,
items a
order by date_in desc, age desc;
结果可在上面的链接中找到。

以下是对我有效的答案:
Here is the Answer which worked for me:
select trunc(sysdate) - level + 1 dt       
, trunc(sysdate) - level + 1 - created_date  age    from items  
connect by trunc(sysdate) - level + 1 - created_date > 0; 

or

SELECT  (SYSDATE-rownum) AS DATE,
((SYSDATE - rownum)- create_time)Age
FROM items
connect by level <3
选择trunc(sysdate)-级别+1 dt ,trunc(sysdate)-级别+1-从项目创建的\u日期期限 通过trunc(sysdate)连接-级别+1-创建日期>0; 或 选择(SYSDATE rownum)作为日期, ((SYSDATE-rownum)-创建时间)年龄 从项目
按级别连接你可能会发现这篇博客文章很有帮助:你可以在窗口聚合中使用lead(),lag(),Hi Elyasin,谢谢你的想法,但它不仅仅适用于3个日期。它适用于所有以前的日期。以前的日期是什么?你的意思是从今天到最早的创建时间?你能保证每天在items表中至少创建一个项目吗?是的Elyasin感谢逻辑,我将尝试它并在这里更新它是否有效:)