Sql-Server

SQL count(*) 按日期範圍分組

  • May 11, 2020

我有一張如下表:

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;

db<>小提琴連結

在此處輸入圖像描述

因此,一張表顯示人們何時進入和退出公司。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 &gt; entry_date 
       AND pr.exit_date &lt;= exit_date 
       AND company_id = pr.company_id
    ) a
ORDER by person_id

引用自:https://dba.stackexchange.com/questions/266947