我已经完成了这个想法,我不确定如何做到这一点。 我将向您提供我当前的查询,该查询为我提供了日期范围所需的行;
WITH CTE AS
(SELECT FER.*, COUNT(*) OVER (PARTITION BY FER.Report_Subject, FER.Event_Category) AS Event_Count
FROM FacilityEventReport FER INNER JOIN
FacilityEventReport_RMReview RMR ON FER.ID = RMR.FER_ID
WHERE RMR.Review_Status = 'Active' AND FER.Report_About = 'Resident' AND @BeginDate <= FER.Event_Date AND @EndDate >= FER.Event_Date AND (LEN(ISNULL(@Category,'')) = 0) OR @Category = FER.Event_Category)
SELECT *
FROM CTE
WHERE Event_Count > 1
ORDER BY Report_Subject
上述查询返回日期参数@BeginDate和@EndDate中发生的所有事件。 @Category是一个可选参数,仅用于按Event_Category过滤查询。此查询返回所有请求的行,但我需要返回的行中至少有一行位于第二个日期参数(@EndDate)的MONTH中。
此查询用于报告。
参数@BeginDate和@EndDate都是DateTime类型。与Event_Date字段一样。
有没有人有任何想法?
谢谢, Kramb
澄清:
简明数据:
Event_Date | Report_Subject | Event_Category
----------------------------------------------------
2016-01-01 | Patient 1 | Aggressive Act
2016-01-02 | Patient 1 | Aggressive Act
2016-02-01 | Patient 1 | Aggressive Act
2016-01-01 | Patient 2 | Fall
2016-01-02 | Patient 2 | Fall
2016-03-01 | Patient 3 | Fall
如果我使用以下参数运行查询:
@BeginDate = '2016-01-01';
@EndDate = '2016-02-01';
我希望返回以下数据:
Event_Date | Report_Subject | Event_Category
----------------------------------------------------
2016-01-01 | Patient 1 | Aggressive Act
2016-01-02 | Patient 1 | Aggressive Act
2016-02-01 | Patient 1 | Aggressive Act
请注意,患者1被退回是因为他们有多个相同类型的事件。此外,事件发生在第二个参数的月份内。
患者2确实有多个事件,但由于这些事件未在第二个参数的月份发生,因此未返回行。
答案 0 :(得分:1)
有很多方法。一种是将其添加到当前查询的末尾:
...
AND EXISTS(
SELECT *
FROM CTE t2 WHERE t2.Report_Subject=CTE.Report_Subject
AND DATEDIFF(Month, Event_Date, @EndDate)=0
)