У меня есть таблица, которая фиксирует рыночные взаимодействия сотрудников с клиентами. Соответствующие поля должны быть :чути, дата и тип клиента.
Я хочу, чтобы можно было рассчитывать количество взаимодействий по 5-недельным блокам, начиная с промежуточных дат, которые будут представлены пользователем и различаются по типу клиента a, b, c.
Я хочу иметь возможность взять возвращенные данные и создать серии a, b и c с количеством взаимодействий на рынке, сгруппированных по 5-недельным блокам.
Что-то вроде:
double[] byValues = { 14, 16, 18, 19, 15, 18, 19, 14, 15 };
string[] bxValues = { "50", "45", "40", "35", "30", "25", "20", "15", "10" };
, который может быть A-Series. Как только у меня появятся серии A, B и C, я смогу добавить их в график с накоплением.
Я бы также хотел, чтобы пользователь мог настраивать X = 5 от 1 до 20, поэтому было бы неплохо иметь эту переменную как динамическую. Любые указатели или URL будут оценены.
Сначала я хотел сделать один запрос и создать временную таблицу с дополнительным полем, которое заполняется оператором if с некоторой математикой, которая вычисляет ранг блока записи в соответствии с ее датой. Тогда я мог бы запросить это с количеством групп по другим критериям. Но я действительно не уверен, каков самый эффективный способ сделать этот первый шаг. Похоже, что я могу ошибиться, возможно, на порядки.
UPDATE:
Это то, что я сделал, и это работает. Это на самом деле довольно просто. Там есть некоторые литералы, которые я могу легко преобразовать в параметры.
SELECT mi1.[CAQ] AS CAQ, FLOOR(DATEDIFF(d, mi1.IDate, CONVERT(datetime, '11/07/2010', 103))/5) AS X_AXISBLOCK
INTO #myTempTable
FROM [ql10_crm].[MarketInteraction] mi1 INNER JOIN [ql10_crm].[TerritoryCustomer]
ON mi1.[CustomerId] =[ql10_crm].[TerritoryCustomer].[CustomerId]
WHERE mi1.[CAQ] IN(1,2,4) AND
[ql10_crm].[TerritoryCustomer].[TerritoryId] IN(19) AND (mi1.[IDate] BETWEEN CONVERT(datetime, '18/06/2009', 103) AND CONVERT(datetime, '11/07/2010', 103));
SELECT CAQ, X_AXISBLOCK , COUNT([CAQ])
FROM #myTempTable
GROUP BY CAQ, X_AXISBLOCK
ORDER BY CAQ, X_AXISBLOCK;
Не уверен, насколько он эффективен или гибок в сравнении с ответами. Придется проверить.
Это мой вывод (CAQ, X_AXISBLOCK, COUNT), где CAQ 1 = A, 2 = B, 4 = C:
2 0 2
2 1 6
2 6 2
4 0 3
4 1 5
4 6 4