mam te dane:Aktywny suma stanu jak SCD w SQL Server 2012
CREATE TABLE #student
(
student_id INT,
status VARCHAR(50),
created_dt DATE
)
CREATE TABLE #student_status_history
(
student_id INT,
from_status VARCHAR(50),
to_status VARCHAR(50),
status_changed_dt DATE
)
INSERT INTO #student (student_id, status, created_dt)
VALUES (1, 'Active', '2016-10-02'),
(2, 'Active', '2016-10-02'),
(3, 'Active', '2016-10-02')
SELECT *
FROM #student
5 października student2
status jest zaktualizowany do inactive
UPDATE #student
SET status = 'Inactive'
WHERE student_id = 2
INSERT INTO #student_status_history (student_id, from_status, to_status, status_changed_dt)
VALUES (2, 'Active', 'Inactive', '2016-10-05')
SELECT *
FROM #student
SELECT *
FROM #student_status_history
8 października student2
stan jest aktualizowany do active
:
UPDATE #student
SET status = 'Active'
WHERE student_id = 2
INSERT INTO #student_status_history (student_id, from_status, to_status, status_changed_dt)
VALUES (2, 'InActive', 'Active', '2016-10-08')
9 października tworzę d innego studenta:
INSERT INTO #student (student_id, status, created_dt)
VALUES (4, 'Active', '2016-10-09')
10 października mam te dane w tabelach.
select * from #student
select * from #student_status_history
Stosując powyższe tabele
powinien wygenerować raport w dniu 10 października począwszy od Oct 1 do Oct 10 aktywnych studentów, z tego dnia
Wyjście powinno być jak poniżej
Date ActiveCount
----------- -----------
2016-10-01 0
2016-10-02 3
2016-10-04 3
2016-10-05 2
2016-10-06 2
2016-10-07 2
2016-10-08 3
2016-10-09 4
2016-10-10 4
co jest logika dla '2016-10-04 3' – TheGameiswar