Sql-Server
SQL count(*) 按日期範圍分組
我有一張如下表:
DROP TABLE IF EXISTS #PersonnelRecord; CREATE TABLE #PersonnelRecord ( person_id int NOT NULL, company_id int NOT NULL, entry_date date NOT NULL, exit_date date NOT NULL, CONSTRAINT PK_PersonnelRecord PRIMARY KEY (person_id) ); INSERT INTO #PersonnelRecord (person_id, company_id, entry_date, exit_date) VALUES (1, 24, '2004-03-17', '2010-12-31'), (2, 24, '2011-04-18', '2019-11-28'), (3, 25, '2017-02-10', '2019-10-20'), (4, 34, '2004-03-17', '2010-12-31'), (5, 24, '2004-03-17', '2999-01-01'), (6, 24, '2010-03-20', '2999-01-01'); SELECT * FROM #PersonnelRecord pr ORDER BY pr.person_id;
因此,一張表顯示人們何時進入和退出公司。2999-01-01 表示此人仍在公司。
我想在退出日期的每一行中添加一個有多少人在公司工作的計數。結果將是:
|-----| | 3 | |-----| | 3 | |-----| | 1 | |-----| | 1 | |-----| | 2 | |-----| | 2 | |-----|
我怎麼能做到這一點?謝謝您的幫助。
您可以使用 APPLY 運算符計算在終止日期活躍的員工人數。當我起初看這個問題時,我錯過了有不同的公司,所以一旦我添加
AND company_id = pr.company_id
到查詢中,我就會得到你期望的結果。SELECT * FROM #PersonnelRecord pr OUTER APPLY ( SELECT count(person_id) as person_count FROM #PersonnelRecord WHERE pr.exit_date > entry_date AND pr.exit_date <= exit_date AND company_id = pr.company_id ) a ORDER by person_id