#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