Определить первое появление конкретного клиента, посещающего магазин в определенном месяце

#sql #sqlproj

#sql #sqlproj

Вопрос:

Мне нужно определить разбивку количества по месяцам (и годам) клиентов [псевдоним, указанный как Patient_ID], которые впервые посетили магазин. Дата посещения магазина сохраняется в столбце [Дата проверки MDT] таблицы.

Клиенты могут приходить в магазин несколько раз в течение года и увеличивать общее количество -> но то, что мне требуется, — это ТОЛЬКО первый раз, когда посетитель посетил.

Например, Том Бомбадил посетил магазин один раз в январе 2019 года, поэтому количество увеличилось до 1, затем снова 4 раза в марте, поэтому количество должно быть 1 для марта и 0 для февраля и 1 для января, затем снова 4 раза в октябре, затем снова 2 раза в декабре.
Я требую, чтобы Том Бомбадил учитывался один и только один раз за определенный месяц, его первое появление, которое было в месяц, должно быть похоже на :

 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 

Комментарии:

1. SQL Server или MySQL? Что вы на самом деле используете? Скобки ( [] ) для идентификации разделителя подразумевают первое.

2. Я использую SQL server