如果类别在给定日期范围内多次出现,请列出事件

时间:2016-03-07 23:54:30

标签: sql sql-server

我有一个包含事件的表。我们需要能够跟踪任何趋势。例如,如果居民在给定日期范围内有2个医疗事件(我在where语句中捕获),则会列出这两个事件。这必须为每个居民做好准备。

在外行人的条款中,我需要列出每个居民在给定日期范围内多次发生的单一类别的每次出现。子类别可以忽略,这是一个完全不同的报告。

我的表类似于下面的内容;​​

 ID  ||ResidentName||  Category  ||SubCategory ||etc...
-----||------------||------------||------------||
GUID ||Resident1   || Medical    || Complaint  ||
GUID ||Resident1   || Medical    || Abrasion   ||
GUID ||Resident1   || Other      || Other      ||
GUID ||Resident2   || Medication || Wrong Med  ||
GUID ||Resident3   || Accidental || Other      ||
GUID ||Resident3   || Aggressive || Staff      ||
GUID ||Resident3   || Aggressive || Resident   ||

我无法弄清楚的是,如何获得以下结果;

ID  ||ResidentName||  Category  ||SubCategory ||etc...
----||------------||------------||------------||
GUID||Resident1   || Medical    || Complaint  ||
GUID||Resident1   || Medical    || Abrasion   ||
GUID||Resident3   || Aggressive || Staff      ||
GUID||Resident3   || Aggressive || Resident   ||

请注意,未列出Resident2,因为他们的事件仅在给定时间内发生过一次。

分组似乎不是我想要的,因为我需要单独的行。 我尝试过使用OVER PARTITION,但这对我来说是一个新的,我并不真正理解它上面的MSDN描述。对此有任何帮助将不胜感激,只有泰诺可以提供帮助。

1 个答案:

答案 0 :(得分:1)

您的想法是正确的,请将COUNTOVER条款一起使用。像这样:

WITH
CTE
AS
(
    SELECT
        ID
        ,ResidentName
        ,Category
        ,SubCategory
        ,etc
        ,COUNT(*) OVER (PARTITION BY ResidentName, Category) AS EventCount
    FROM MyTable
    WHERE
        DateColumn >= 'start date'
        AND DateColumn < 'end date'
)
SELECT
    ID
    ,ResidentName
    ,Category
    ,SubCategory
    ,etc
FROM CTE
WHERE EventCount > 1
ORDER BY ResidentName;