【发布时间】:2016-05-05 18:03:06
【问题描述】:
我已经没有这个想法了,我不知道该怎么做。 我会给你我当前的查询,给我日期范围所需的行;
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 字段也是如此。
有人有什么想法吗?
谢谢, 克拉姆
澄清:
精简数据:
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 确实有不止一个事件,但因为这些事件没有发生在第二个参数的月份,所以没有返回行。
【问题讨论】:
-
您是说需要返回 EndDate 月份的行,即使您的数据库中没有这样的行?
-
否,结果按报告主题和事件类别分组。如果报告主题在某一日期范围内有多个事件类别,则查询将返回所有这些行。我需要其中一个返回的行位于第二个日期参数 (@EndDate) 的月份内。如果第二个月内没有任何事件,则不应为该报告主题返回任何行。
-
我无法想象您所描述的内容。您可以添加示例数据、当前结果和所需结果吗?
-
当然,没问题。给我一分钟时间来设置它。
-
好的,所以问题是,如果患者在上个月没有任何行,那么您不希望为该患者返回任何行吗?
标签: sql-server