То, что у вас есть, это проблема пробелов и островков. Менеджер пользователя изменил back на предыдущее значение, поэтому значение MIN
все еще является первым, когда этот человек был их менеджером. Одним из способов создания острова является использование ROW_NUMBER()
:
USE Sandbox;
GO
--Sample Table
CREATE TABLE dbo.hr_nonadvisorbyday(ReportingDate date,
EmpName varchar(50),
ManagerName varchar(50));
GO
--Sample data
INSERT INTO dbo.hr_nonadvisorbyday
VALUES('01-Jan-19','Anand Kumar','Amitabh'),
('02-Jan-19','Anand Kumar','Amitabh'),
('03-Jan-19','Anand Kumar','Amitabh'),
('04-Jan-19','Anand Kumar','Amitabh'),
('05-Jan-19','Anand Kumar','Sachin'),
('06-Jan-19','Anand Kumar','Sachin'),
('07-Jan-19','Anand Kumar','Sachin'),
('08-Jan-19','Anand Kumar','DEEpak'),
('09-Jan-19','Anand Kumar','DEEpak'),
('10-Jan-19','Anand Kumar','DEEpak'),
('11-Jan-19','Anand Kumar','Amitabh');
GO
--Your (heavily editted) Solution
SELECT Min(ReportingDate) MetricDate,
EmpName,
ManagerName
FROM dbo.[hr_nonadvisorbyday]
WHERE ManagerName <> 'Craig Nixon'
AND EmpName = 'Anand Kumar'
GROUP BY EmpName,
ManagerName
ORDER BY metricdate;
GO
--Solution
WITH Grps AS(
SELECT ReportingDate,
EmpName,
ManagerName,
ROW_NUMBER() OVER (PARTITION BY EmpName ORDER BY ReportingDate) -
ROW_NUMBER() OVER (PARTITION BY EmpName, ManagerName ORDER BY ReportingDate) AS Grp
FROM dbo.hr_nonadvisorbyday
WHERE ManagerName <> 'Craig Nixon'
AND EmpName = 'Anand Kumar')
SELECT Min(ReportingDate) MetricDate,
EmpName,
ManagerName
FROM Grps
GROUP BY EmpName,
ManagerName,
Grp;
GO
--Clean up
DROP TABLE dbo.hr_nonadvisorbyday