mysql Festival -用于计算新参与者和停止参与者的sql查询

pdkcd3nj  于 2023-04-10  发布在  Mysql
关注(0)|答案(1)|浏览(128)

我有一个节日,已经发生了25年的表。THHE表是:

Member Table
| MemberID | Last_Name | First_Name |
|     1    |  Smith    |    John    |
|     2    | Johnson   |     Bob    |
|     3    |  Newman   |    Sam     |
|     4    |   White   |   John     |

Transactions Table
| TransactionID | MemberID | FestYear | 
|        1      |    1     |   2010   |
|        2      |    1     |   2011   |
|        3      |    1     |   2012   |
|        4      |    2     |   2010   |
|        5      |    3     |   2011   |
|        6      |    3     |   2012   |
|        7      |    4     |   2012   |

我想要一个输出,计数(1)有多少参与者是他们的第一个节日(他们以前从未去过这个节日)。(2)有多少参与者是他们的最后一个节日(他们再也没有来过)。

| FestYear | MemberFirstFestival | MemberLastFestival |
|   2010   |       2             |        1           |
|   2011   |       1             |        0           |
|   2012   |       1             |        3           |

我不太擅长这样的大型SQL语句,所以没有任何进展。我知道我可以写几个循环SQL语句,但这似乎真的很低效。

aij0ehis

aij0ehis1#

我们可以使用窗口函数和条件聚合来实现:

select festYear, sum(rn1 = 1) MemberFirstFestival , sum(rn2 = 1) MemberLastFestival 
from (
    select t.*,
        row_number() over(partition by memberId order by festYear     ) rn1,
        row_number() over(partition by memberId order by festYear desc) rn2
    from transactions t
) t
group by festYear
order by festYear
节日会员第一节会员LastFestival
2010年1
2011年10
2012年1

fiddle

相关问题