繁体   English   中英

获取不同年份中按天/月的最早日期

Obtaining the earliest date by day/month among different years

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个日期列表:

活动日期

- 06/04/1998
- 12/08/1980
- 29/11/2010
- 16/06/2002
- 20/10/2007
- 10/07/2000

我想获得所有这些年来按日/月计的最早活动日期。 所以最早的是1998年6月4日,如果我想获得最新的活动日期,那就是29/11/2010。 我该如何编写语法?

5 个回复
SELECT MAX(date), MIN(date), YEAR(date) year, MONTH(date) month
FROM table
GROUP BY YEAR(date), MONTH(date)

注意:这是伪代码-您需要查找oracle中正确的功能是从日期中提取年和月。

您还将受益于以下YEAR(date), MONTH(date), date的函数索引: YEAR(date), MONTH(date), date

SELECT EXTRACT( MONTH FROM date_column),
       EXTRACT( DAY   FROM date_column),
       EXTRACT( YEAR  FROM date_column),
       date_column
  FROM table
 ORDER BY 1, 2, 3

并选择第一条记录

SELECT *
  FROM (SELECT EXTRACT( MONTH FROM date_column),
               EXTRACT( DAY   FROM date_column),
               EXTRACT( YEAR  FROM date_column),
               date_column
          FROM table
         ORDER BY 1, 2, 3)
 WHERE rownum <= 1

假设我确实知道您确实想要任何一年中的按月/月的最早日期,那么分析功能可以做到这一点:

select dt from (
    select dt,
        dense_rank() over (partition by 1 order by to_char(dt, 'MMDD'),
            to_char(dt, 'YYYY')) rn
    from t
)
where rn = 1;

DT
----------
06/04/1998

此处的内部select是根据我指定的顺序使用dense_rank()为每个日期分配一个排名-还有其他方法可以执行此操作,但是将日/月转换为字符串似乎可行,因此我将年份包括在内如果您在一年中的同一天/每个月中有同一天(一个月)(如果您想在这种情况下最早的一年),则可以打破关系。 只是这样,加上一些额外的日期,看起来像这样:

alter session set nls_date_format = 'DD/MM/YYYY';
with t as (
    select to_date('06/04/1998') as dt from dual
    union all select to_date('12/08/1980') from dual
    union all select to_date('29/11/2010') from dual
    union all select to_date('16/06/2002') from dual
    union all select to_date('20/10/2007') from dual
    union all select to_date('10/07/2000') from dual
    union all select to_date('10/07/1999') from dual
    union all select to_date('06/04/1999') from dual
)
select dt,
    dense_rank() over (partition by 1 order by to_char(dt, 'MMDD'),
        to_char(dt, 'YYYY')) rn
from t;

DT         RN
---------- ----------
06/04/1998      1
06/04/1999      2
16/06/2002      3
10/07/1999      4
10/07/2000      5
12/08/1980      6
20/10/2007      7
29/11/2010      8

8 rows selected.

外部选择仅选择秩rn = 1dt值。

如果要查找最新版本,请更改order by子句以包含desc以便它们以相反的顺序排序。

怎么样:

从...中选择日期,其中rownum = 1(按月(日期)* 100 +日期(日期)desc)

从...中选择日期,其中rownum = 1(按月(日期)* 100 +天(日期)asc

如果该列表已在表中。

只需选择Max(fieldName)或Min(fieldName)

2 如何在Java中获取List的最早日期?

我有一个存储 0...4 个日期的 ArrayList。 列表中的日期数量取决于业务逻辑。 我怎样才能得到这个列表的最早日期? 当然,我可以构建迭代循环来最终检索最早的日期。 但是有没有一种“更干净”/更快的方法来做到这一点,尤其是考虑到这个列表可以在以后的角度增长时? ...

3 如何从多个条件中获取物料代码的最早日期

如何从类别(Pull、Push、Push-M、Pull-M)中获取相同物料代码的最早日期。 其次,如果没有匹配的类别,则返回空白。 任何人都可以通过参考示例数据图像来帮助指导使用适当的公式。 样本数据 ...

4 如何获取每个不同 ID 的最早日期和状态

我一直在尝试编写一个查询来完善这个实例,但似乎无法做到这一点,因为我仍然收到重复的信息。 希望我能得到帮助如何解决这个问题。 我的输出如下 因此,尽管查询正在执行我的要求并显示每个状态的最小状态日期,但我只想要第一个状态日期。 我有大约 30k 行要过滤,所以任何不运行的内容都会使查询过载并 ...

6 获取最早日期的SQL方法

当记录存储在列中时,获取每个客户的销售日期的最佳方法是什么? 每条记录都被扁平化并存储过去 15 年每个月的销售数据。 因此,它包含 Client_ID 和销售月份(Dec_08、Jan_09、Feb_09...)作为列标题,列值包含作为整数的销售值(盒数)。 我需要计算 datediff 以获得自 ...

8 获取每个ID的最早日期

给定以下 有什么方法可以从所有3个表中获得每个ID的最早最早日期以及table1中ID的名称? 因此,上面的结果应如下所示: ...

9 不同年份日期之间的PhP月差异

我有这段代码返回了一个奇怪的结果: 它返回了9个月,这是错误的。 这个问题很简单,但是我找不到答案:我在做什么错? ...

2019-02-03 12:22:58 2 30   php/ date
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM