Oracle 如何获取我输入的每一行中最早日期和最早日期之间的天数
我很难获得最早日期和最新日期之间的天数,问题是如果我使用最小值或最大值,我必须按列分组,这是一个问题,因为我没有按列分组 如果我的数据如下所示:Oracle 如何获取我输入的每一行中最早日期和最早日期之间的天数,oracle,date,analytic-functions,Oracle,Date,Analytic Functions,我很难获得最早日期和最新日期之间的天数,问题是如果我使用最小值或最大值,我必须按列分组,这是一个问题,因为我没有按列分组 如果我的数据如下所示: 2017/01/01 EXAMPLE 2017/01/01 EXAMPLE 2017/01/01 EXAMPLE 2017/01/05 EXAMPLE 2017/01/06 EXAMPLE 2017/01/06 EXAMPLE 2017/01
2017/01/01 EXAMPLE
2017/01/01 EXAMPLE
2017/01/01 EXAMPLE
2017/01/05 EXAMPLE
2017/01/06 EXAMPLE
2017/01/06 EXAMPLE
2017/01/08 EXAMPLE
我需要在整个表中添加一个带有静态数字的列,使其看起来像:
2017/01/01 EXAMPLE 8
2017/01/01 EXAMPLE 8
2017/01/01 EXAMPLE 8
2017/01/05 EXAMPLE 8
2017/01/06 EXAMPLE 8
2017/01/06 EXAMPLE 8
2017/01/08 EXAMPLE 8
这可能非常简单,但如果不分组,我就无法正确地得到它-8是最早的一天和最后一天之间的天数
这适用于ORACLE在分析版本中使用最大值和最小值:
select dt, str, max(dt) over () - min(dt) over () + 1 diff
from t
例如:
with t (dt, str) as (
select date '2017-01-01', 'EXAMPLE' from dual union all
select date '2017-01-01', 'EXAMPLE' from dual union all
select date '2017-01-01', 'EXAMPLE' from dual union all
select date '2017-01-05', 'EXAMPLE' from dual union all
select date '2017-01-06', 'EXAMPLE' from dual union all
select date '2017-01-06', 'EXAMPLE' from dual union all
select date '2017-01-08', 'EXAMPLE' from dual)
select dt, str, max(dt) over () - min(dt) over () + 1 diff
from t
结果:
DT STR DIFF
----------- ------- ----------
2017-01-01 EXAMPLE 8
2017-01-01 EXAMPLE 8
2017-01-01 EXAMPLE 8
2017-01-05 EXAMPLE 8
2017-01-06 EXAMPLE 8
2017-01-06 EXAMPLE 8
2017-01-08 EXAMPLE 8
7 rows selected
编辑:
您的查询应该是:
select RATE_CODE, BUSINESS_DATE,
max(BUSINESS_DATE) over () - min(BUSINESS_DATE) over () + 1 diff
from RATE_CODE_STAT_DAILY
您不需要with子句,我添加它只是为了生成一些示例数据。只需使用上面的查询。我不知道真正的表名和列名
在这种情况下,您应该使用最小值和最大值。第一个值和最后一个值是可选的,但请仔细阅读文档并理解差异。下面的内容正好满足了我的需要-感谢@Pounder提供了有关分析的提示,做了一些研究,发现了第一个值和最后一个值
select
RATE_CODE,
BUSINESS_DATE,
FIRST_VALUE(BUSINESS_DATE) over() AS FIRSTDATE,
LAST_VALUE(BUSINESS_DATE) over(ORDER BY RATE_CODE RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS LASTDATE
from RATE_CODE_STAT_DAILY
where BUSINESS_DATE > '01-JUL-17'
示例是什么?示例数据有两列吗?请澄清。使用费率代码统计日费率代码,业务日期作为选择费率代码,业务日期从双选费率代码,业务日期,最大业务日期超过-最小业务日期超过+1与费率代码统计日之差Hi Pounder,非常感谢上述内容,我遇到了困难,因为我的SQLDeveloper在从上面的查询中选择之后,抛出了错误,说RATE_代码上的标识符无效。我认为您应该使用min和max。您在注释中附加的查询不起作用,因为dual没有RATE_代码这样的列。只需在答案中将第一个_值替换为最小值,将最后一个_值替换为最大值,然后在实际表中工作。但如果你坚持第一价值观,并且它对你有效,那就没关系了。对我来说,这看起来有点可疑。