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_代码这样的列。只需在答案中将第一个_值替换为最小值,将最后一个_值替换为最大值,然后在实际表中工作。但如果你坚持第一价值观,并且它对你有效,那就没关系了。对我来说,这看起来有点可疑。