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感谢逻辑,我将尝试它并在这里更新它是否有效:)