【问题标题】:Count records which appeared in each previous years统计往年出现的记录
【发布时间】:2020-01-17 02:46:00
【问题描述】:

假设我有一个包含idyear 列的表。我想找出前几年出现的id的数量。

样本表

id | year | 
---+------+
 1 | 2017 |
 2 | 2017 | 
 1 | 2018 | 
 2 | 2018 |
 3 | 2018 |
 4 | 2019 |
 3 | 2019 |
 1 | 2019 |

预期输出

 | 2017 | 2 |
 | 2018 | 2 |
 | 2019 | 1 |

2017 年出现 1 和 2,因此计数为 2。2018 年出现 1 2 和 3,但 2017 年仅出现 1 和 2,因此 2018 年计数为 2。2019 年出现 1 3 和 4,但只有 1出现在 2017 年和 2018 年,因此 2019 年的计数为 1。

【问题讨论】:

  • 。 .我碰巧认为这是一个很好的问题。我不知道为什么它被否决了。
  • @GordonLinoff -“这个问题没有显示任何研究工作”
  • @DaleBurrell 。 . .奇怪你这么说。具体问题对我来说并没有敲响警钟。有两个人试图回答错误。这对大多数人来说并不明显;虽然也许是给你的。

标签: sql sql-server


【解决方案1】:

您可以枚举 id 和年份并进行比较:

select year, count(*)
from (
    select t.*,
        row_number() over (partition by id order by year) as seqnum_id,
        dense_rank() over (order by year) as seqnum_year
    from t
) t
where seqnum_id = seqnum_year
group by year;

Here 是一个 dbfiddle。

【讨论】:

  • 非常感谢。现在我想到了另一件事。如果一年有重复条目(比如 1 在 2018 年出现两次),这会起作用吗? p.s 我已经检查了您提供的小提琴中的重复条目。不工作。
  • @AdnanNiloy 。 . .不可以。您可以使用dense_rank() 代替row_number() 代替seqnum_id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 2016-09-20
  • 2014-03-21
  • 1970-01-01
  • 2011-04-08
相关资源
最近更新 更多