Как найти частоту (еженедельно, ежемесячно) того, как пользователь вставляет строку в базу данных на основе 2 временных интервалов - PullRequest
0 голосов
/ 13 июня 2019

Я работаю над отчетом, и мне нужно выяснить, как часто пользователь вставляет строку в базу данных на основе интервала (@ startDate, @ finalDate), который я выбираю из пользовательского интерфейса.

Например: у меня есть интервал: 25/05/2019 - 06/13/2019

Alter PROCEDURE [dbo].[BT_Test_Procedure_With_Period] 
@beginDate DateTime,
@endDate DateTime
AS BEGIN
SET NOCOUNT ON;
SELECT name, COUNT(*) as 'nrOfRows',
CASE
WHEN COUNT(*)  >= DATEDIFF(WEEK, @beginDate, @endDate) THEN 'x'
ELSE ''
END AS 'Weekly',
CASE WHEN COUNT(*) >=DATEDIFF(WEEK, @beginDate, @endDate)/4  AND COUNT(*) 
<DATEDIFF(WEEK, @beginDate, @endDate) THEN 'x' 
ELSE ''
END AS 'Montly',
CASE WHEN COUNT(*) >1 AND COUNT(*) <DATEDIFF(WEEK, @beginDate, 
@endDate)/4 THEN 'x'
ELSE ''
END AS 'Rare',
CASE WHEN COUNT(*) = 1 THEN 'x'
ELSE ''
END AS 'One time'  FROM InsertedRecords
WHERE @InsertedDateRow BETWEEN @beginDate AND @endDate
GROUP BY name
ORDER BY nrOfRows DESC

Если пользователь вставил хотя бы одну строку в каждую неделю в этом интервале,частота будет: еженедельно.Или, если он вставит хотя бы одну строку в каждый месяц в этом интервале, но не в каждую неделю, частота будет: ежемесячно

Мой вопрос здесь такой: как мне проверять каждую неделю и месяц с текущего интервала допосмотреть, есть ли там @rowInsertedDate?

В данном конкретном случае с 25/05/2019 по 13 июня 2009 года есть 3 допустимые недели, в которые пользователь может вставить строку: 27 мая - 02 июня 03Июнь - 09 июня 10 июня - 13 июня

Если пользователь вставляет строку в каждый из этих 3: еженедельно, иначе ежемесячно.

Надеюсь, я достаточно ясно, спасибо!

1 Ответ

0 голосов
/ 13 июня 2019

Попробуйте

SELECT name, COUNT(*) as 'nrOfRows',
    CASE
    WHEN COUNT(DISTINCT DATEPART(wk, @InsertedDateRow))  >= DATEDIFF(WEEK, @beginDate, @endDate) THEN 'x'
    ELSE ''
    END AS 'Weekly',
 -- ..
FROM InsertedRecords
WHERE @InsertedDateRow BETWEEN @beginDate AND @endDate
GROUP BY name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...