Я знаю, что это возможно, но не уверен, как это настроить.В основном мне нужно получить данные для каждого сотрудника, но только если они соответствуют определенным критериям, основанным на нескольких разных датах.
Например, если сотрудник был назначен в компанию до 6/1, он учитывается автоматически.
Если сотрудник был назначен в компанию после 6/1, он учитывается только в том случае, если у него есть проверка с этой компанией после назначенной даты (т. Е. Он назначен 6/25 и имеет проверку7/1 ... это следует учитывать. Если, например, они были назначены на 6/25, а проверка произошла 6/15, они не будут учитываться для этого сотрудника)
Если сотрудник отстранен от должностикомпания до 4/1 они не учитываются.Если они удалены 4/1 или позже, это считается.
Таким образом, ключевыми столбцами являются Дата создания обзора, Дата начала и Дата окончания из таблицы сотрудник-клиент.
Я считаю,это может быть либо какой-то тип подзапроса, который возвращает начальную дату для сотрудника с этим клиентом, а затем сравнивает дату проверки на основе выписки по делу, сравнивая эту дату с датой проверки, но я точно не знаю, как это сделать.
Любая помощь будет оценена.
РЕДАКТИРОВАТЬ: Структура таблицы / данные ниже:
Таблица сотрудника-клиента
ID EmpID CustID StartDate EndDate
1 4 10 10/1/2017 2/21/2018
2 4 11 10/1/2017 7/31/2018
3 4 15 10/1/2017 4/8/2018
4 4 17 6/1/2018 NULL (means still active with this employee)
5 4 19 5/18/2018 NULL
Таблица данных клиента
ID CustID ActivityDate Task
1 10 1/13/2018 Review
3 15 4/2/2018 Review
4 17 6/25/2018 Review
5 17 6/13/2018 Client Engagement
6 17 6/29/2018 Client Engagement
7 19 5/25/2018 Client Engagement
8 19 6/28/2018 Review
Итак, для этого примера я хочу запрос, который возвращает следующие идентификаторы клиента с данными, основанными на критериях:
- 10: Этот клиент НЕ возвращается, потому что клиент был отстранен от сотрудника до даты прекращения 4/1.
- 11: Этот клиент ДЕЛАЕТ получитьвернулся, потому что еУ клиента mployee был срок истечения 5/31, хотя для клиента нет отзыва
- 15: Этот клиент DOES возвращается, потому что у сотрудника был клиент, прошедший 4/ 1 предельная дата до того, как она была удалена из них.
- 17: Обручение клиента с 29.06.2008 DOES возвращается, но обручение клиента с 13.06.2008 делает НЕ получить обратно, потому что это произошло ДО того, как проверка была проведена с этим клиентом (фактически, когда Дата начала работы сотрудника для клиента - ПРОШЛОЕ 5/31, действие считается только ПОСЛЕ того, как у него была проверка с этим клиентом - вседействие, которое происходит до этой даты проверки, игнорируется)
- 19: в этом случае возвращается Обязательство клиента DOES , поскольку сотрудник был назначен им до 6/1, поэтому любая операцияучитывается независимо от того, была ли сделана проверка до появления другого элемента.
Надеюсь, это объяснение и разбивка имеют смысл.
ОБНОВЛЕНИЕ: Вот сценарии таблицы и ожидаемые результаты:
CREATE TABLE Cust_Employee(
Cust_Emp_ID int IDENTITY(1,1) NOT NULL,
Cust_ID int NOT NULL,
Emp_ID int NULL,
Start_Date datetime NULL,
End_Date datetime NULL,
CONSTRAINT PK_Cust_Employee PRIMARY KEY CLUSTERED
(
Cust_Emp_ID ASC
)WITH (PAD INEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY
)ON PRIMARY
GO
CREATE TABLE Cust_Data(
Cust_Data_ID int IDENTITY(1,1) NOT NULL,
Cust_ID int NULL,
Activity_Date datetime NULL,
Task VARCHAR(50) NULL
)
CONSTRAINT PK_Client_Data PRIMARY KEY CLUSTERED
(
Cust_Data_ID ASC
)WITH (PAD INEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY
)ON PRIMARY
GO
INSERT INTO Cust_Employee VALUES(4, 10, '10/1/2017', '2/21/2018')
INSERT INTO Cust_Employee VALUES(4, 11, '10/1/2017', '7/31/2018')
INSERT INTO Cust_Employee VALUES(4, 15, '10/1/2017', '4/8/2018')
INSERT INTO Cust_Employee VALUES(4, 17, '6/1/2018', NULL)
INSERT INTO Cust_Employee VALUES(4, 19, '5/18/2018', NULL)
INSERT INTO Cust _Data VALUES(10, '1/13/2018', 'Review')
INSERT INTO Cust _Data VALUES(15, '4/2/2018', 'Review')
INSERT INTO Cust _Data VALUES(17, '6/25/2018', 'Review')
INSERT INTO Cust _Data VALUES(17, '6/13/2018', 'Client Engagement')
INSERT INTO Cust _Data VALUES(17, '6/29/2018', 'Client Engagement')
INSERT INTO Cust _Data VALUES(19, '5/25/2018', 'Client Engagement')
INSERT INTO Cust _Data VALUES(19, '6/28/2018', 'Review')
Ожидаемые результаты: