特殊条件的记录计数

堆栈用户

我正在尝试从下面的列表中获取居民人数。如果一个居民被列出一次以上,并且“结束日期”(记录1)比“开始日期”(记录2)短一天,那么该居民应仅被计数一次。

因此,在下面的示例中,BEAL应该计数一次,CARVER应该计数两次,CLAUS应该计数三次。

所需的输出总驻地计数= 13。

不知道如何实现这一目标。

facility    Resident    StartDate   Enddate     Payer
ABC         AMMONS      9/12/2020   11/4/2020   Medicaid
ABC         ANDERSON    3/4/2020    11/18/2020  Medicaid
ABC         BEAL        1/1/2020    11/21/2020  Medicaid
ABC         BEAL        11/22/2020  11/24/2020  Medicaid
ABC         BEESON      10/26/2020  11/11/2020  Medicaid
ABC         BOLING      2/29/2020   11/20/2020  Medicaid
ABC         Boaring     5/13/2019   11/23/2020  Medicaid
ABC         BROCATO     11/12/2020  11/27/2020  Medicaid
ABC         BUSCH       3/9/2019    11/4/2020   Medicaid
ABC         CARVER      8/6/2020    11/1/2020   Medicaid
ABC         CARVER      11/6/2020   11/13/2020  Medicaid
ABC         CLAUS       5/7/2020    11/1/2020   Medicaid
ABC         CLAUS       11/5/2020   11/11/2020  Medicaid
ABC         CLAUS       11/12/2020  11/30/2020  Medicaid
ABC         CLAUS       12/15/2020  12/25/2020  Medicaid
DVT

试试这个

; WITH cte AS (
SELECT Resident, StartDate, EndDate
, LAG( EndDate, 1, NULL ) OVER (PARTITION BY Resident ORDER BY StartDate) LastEndDate
FROM tmp
), cte1 AS (
SELECT Resident, StartDate, EndDate, LastEndDate
, ResidentCount = CASE WHEN StartDate <= DATEADD(day, 1, LastEndDate) THEN 0 ELSE 1 END
FROM cte
)
SELECT "Total Resident Count" = SUM(ResidentCount)
FROM cte1

查询测试

WITH tmp AS (
SELECT Resident, StartDate = CONVERT(Date, StartDate) , EndDate = CONVERT(DATE, EndDate)
FROM (
VALUES
 ('AMMONS','9/12/2020','11/4/2020')
, ('ANDERSON','3/4/2020','11/18/2020')
, ('BEAL','1/1/2020','11/21/2020')
, ('BEAL','11/22/2020','11/24/2020')
, ('BEESON','10/26/2020','11/11/2020')
, ('BOLING','2/29/2020','11/20/2020')
, ('Boaring','5/13/2019','11/23/2020')
, ('BROCATO','11/12/2020','11/27/2020')
, ('BUSCH','3/9/2019','11/4/2020')
, ('CARVER','8/6/2020','11/1/2020')
, ('CARVER','11/6/2020','11/13/2020')
, ('CLAUS','5/7/2020','11/1/2020')
, ('CLAUS','11/5/2020','11/11/2020')
, ('CLAUS','11/12/2020','11/30/2020')
, ('CLAUS','12/15/2020','12/25/2020')
) a (Resident, StartDate, EndDate)
), cte AS (
SELECT Resident, StartDate, EndDate
, LAG( EndDate, 1, NULL ) OVER (PARTITION BY Resident ORDER BY StartDate) LastEndDate
FROM tmp
), cte1 AS (
SELECT Resident, StartDate, EndDate, LastEndDate
, ResidentCount = CASE WHEN StartDate <= DATEADD(day, 1, LastEndDate) THEN 0 ELSE 1 END
FROM cte
)
SELECT "Total Resident Count" = SUM(ResidentCount)
FROM cte1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

需要特殊条件的计数记录

条件CF记录计数

根据条件对记录进行计数

PostgreSQL 中的条件计数记录

如何从特殊记录中查找最后记录的计数

SQL中关联记录计数的条件

按关联记录的条件计数顺序

返回符合计数条件的记录

根据与指定条件匹配的子记录计数选择记录

在指定记录之前对符合条件的记录进行计数

MS Access:根据记录级条件对字段进行计数

根据条件按时间序列运行计数记录

想要:SQL查询以计数满足某些条件的记录并返回有关最高计数的信息

水晶报表中的特殊字段记录号在没有获取记录的情况下计数为 1

对记录在另一个表中的投票满足条件的记录进行计数

特殊分组计数 IF - Excel

SQLite 3特殊计数

Power Query、M 语言、特殊条件下连续计数项目

如果不存在,则插入记录到 MySQL 中具有特殊条件的特定列

SQL查询特殊记录

显示部分记录的计数记录

编写一个查询,在同一行上显示不同条件的记录计数

SparkR。SQL。使用时间戳在滚动时间窗口内计数满足条件的记录

熊猫按两列分组,并且仅根据计数保留满足条件的记录

根据条件进行计数,然后除以记录数以获取时间间隔

根据计数有条件地将记录插入多线程环境中的表中

Netezza 有条件地为每个 ID 计数一条记录

Tableau:使用LOD根据条件对不同的记录数进行计数(10.2)

Power BI会根据假设参数对符合条件的记录的实例进行计数