当前位置: 首页 > 面试题库 >

查找表中每个ID的最大连续年份(Oracle SQL)

郭知
2023-03-14
问题内容

我正在尝试解决一个问题,该问题是如何在一系列记录中查找连续年份的最大数量。在以下示例中:

身份证年
1 1993年
1994年1月1日
1995年1月1日
1995年1月1日
1 2001
1 2002
1993年2月2日
1995年2月2日
1996年2月2日
1996年2月2日
1998年2月2日
1999年2月2日
2 2000
2001年2月2日
2001年2月2日

我的结果集应该看起来像

身份证数
1 3
2 4

我必须用oracle SQL编写代码。


问题答案:

这将产生您想要的结果:

select
  id,
  ayear,
  byear,
  yeardiff
from
(
  select
    a.id,
    a.year ayear,
    b.year byear,
    (b.year - a.year)+1 yeardiff,
    dense_rank() over (partition by a.id order by (b.year - a.year) desc) rank
  from
    years a
    join years b on a.id = b.id 
        and b.year > a.year
  where
    b.year - a.year = 
      (select count(*)-1
         from years a1
        where a.id = a1.id
             and a1.year between a.year and b.year)
)
where
  rank = 1

编辑 已更新,以显示最长延伸的开始/结束年份。

SQLFiddle



 类似资料:
  • 问题内容: 我有以下数据按player_id和match_date排序。我想找出连续运行次数最多的记录组(从2014-04-03到2014-04-12连续3次运行4次) 我想出了以下SQL: 但这 延续 了之前连续运行的排名(由于玩家1已经出现3次,因此在2014-04-19进行的4次针对Player 1的排名预计为1,但排名为4)。同样,在2014-04-19上,玩家2的23奔跑有望获得等级1,

  • 本文向大家介绍在Python中的每个子列表中查找最大值,包括了在Python中的每个子列表中查找最大值的使用技巧和注意事项,需要的朋友参考一下 我们得到一个列表列表。在内部列表或子列表中,我们需要在每个列表中找到最大值。 与最大和 我们设计一个带in条件的for循环,并应用max函数来获取每个子列表中的最大值。 示例 输出结果 运行上面的代码给我们以下结果- 带映射和最大 在遍历子列表时,我们继续

  • 给定一个向量和一个有序向量,我想要一个向量,其中 ] 等于 中最小元素的索引,以便

  • 问题内容: 我需要查询方面的帮助。 我有这个简单的表: 看起来像这样: 我想为给定的readVal获得最后的连续行: 在上面的示例中将是: id:3 for readVal = 2 id:8 for readVal = 3 我尝试了以下查询: 只要该系列中没有缺失的ID,它就可以工作。在上面的示例中,编号4缺失,查询将不会返回预期的结果。 谢谢! 问题答案: 返回: 对于还需要最后一行的情况: 返

  • 问题内容: 在下面的表格中,我需要获取状态日期等于2的最大日期的行 我需要使用此请求获取具有最大日期和按REMUN_ID分组的行 结果 : 我需要调整请求以从此结果中仅获取statut = 2的行 我的目的是获取以下结果,这是第一个查询的子查询,以仅获取具有状态2的子查询。 PS:如果我使用了将从中得到这些结果的子句: 那不是我想要的。 有什么建议?谢谢 问题答案: SQLFiddle:http

  • 你是一个电视游戏节目的参与者,这给了你赢得奖金的机会。在游戏中,你会看到一系列框,每个框都包含一个允许你看到的正整数值。你有机会选择任何数量的盒子。您的总奖金是您选择包含的所有盒子的总和。这个游戏只有一个限制:如果你选择了两个连续的盒子,你不允许在总数中添加任何后续的盒子,而你的奖品是截至该点的累计金额。你的目标是最大化你的奖金。 给定一个正整数数组,代表游戏中呈现给你的每个盒子的值,返回你能赢得