首页 > 解决方案 > 确定特定客户在特定月份第一次访问商店

问题描述

我需要确定第一次访问商店的客户 [别名为 Patient_ID] 的每月(和每年)的计数细分。商店访问的日期时间存储在表格的[MDT Review Date]列中。

客户可以全年多次光顾商店并增加总数-> 但我需要的只是客户第一次光顾。

例如,Tom Bombadil 在 2019 年 1 月访问了该商店一次,因此计数增加到 1,然后在 3 月再次增加 4 次,因此计数应该是 3 月份的 1,2 月份的 0 和 1 月份的 1,然后在 10 月份再次增加 4 次,然后在 12 月再次 2 次。
我要求 Tom Bombadil在特定月份只计算一次,他的第一次出现是每月输出应该是这样的:

rn1 YEAR    Month_Number    Month       Total_Count
1   2010    6               June        2
1   2010    7               July        1
1   2010    8               August      5
1   2010    10              October     5
1   2010    11              November    3
1   2011    1               January     4
1   2011    2               February    6
1   2011    4               April       7
1   2011    5               May         4
1   2011    6               June        10
1   2011    7               July        10
1   2011    8               August      14
1   2011    9               September   4
1   2011    10              October     8
1   2011    11              November    11
1   2011    12              December    11
1   2012    1               January     8
1   2012    2               February    21​

请参考我的查询。我尝试使用窗口功能COUNT来计算每月的商店访问次数。然后该ROW_NUMBER函数尝试为每次访问分配一个唯一编号。我究竟做错了什么?

select 
        *
    from
        (select distinct 
             row_number() over (partition by p.Patient_ID, p.PAT_Forename1, p.PAT_Surname
                                order by PAT_Forename1, p.Patient_ID, PAT_Surname) AS rn1,
             datepart(year, [DATE_COLUMN]) as YEAR,
             datepart(month, [DATE_COLUMN]) as Month_Number,
             datename(month,[DATE_COLUMN]) as Month,
             count(p.Patient_ID) over (partition by datepart(year,[DATE_COLUMN]),
             datename(month, [DATE_COLUMN])) as Total_Count
         from 
             Tablename m
         inner join 
            TableName p on m.PK_ID = p.PK_ID
        
         ) as temp
    where 
        rn1 = 1​

标签: sqlsqlproj

解决方案


推荐阅读