首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将PatientName与7天内的小时数相加(如果超过9小时)

如何将PatientName与7天内的小时数相加(如果超过9小时)
EN

Stack Overflow用户
提问于 2017-04-12 21:37:27
回答 3查看 53关注 0票数 1

当他们在7天内有9个小时或更长的时间时,我必须找到PatientName。然后通过PatientName提供小时之和。示例:

TempTable1获得了一年的数据:

代码语言:javascript
复制
PatientName       VisitDate       Hours
Steve             11/2/2016        1
Steve             11/3/2016        1
Pete              11/1/2016        3
Pete              11/2/2016        7
Dave              11/1/2016        3
Dave              11/2/2016        3
Dave              2/2/2016         3

史蒂夫没有足够的时间。戴夫有9个小时,但不在7天之内。皮特在7天内有10个小时。因此,产出应类似于:

代码语言:javascript
复制
   PatientName          (SUM)Hours
   Pete                    10

这完全超出了我的能力。我认为这将需要一个多方面的选择和领先和滞后,但这完全超出了我的能力水平。

希望SQL忍者神灵能做到这一点。请救救我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-12 21:46:50

一种方法是自连接和聚合:

代码语言:javascript
复制
select t1.patientname, sum(t2.hours)
from temptable1 t1 join
     temptable1 t2
     on t2.patientname = t1.patientname and
        t2.visitdate >= t1.visitdate and
        t2.visitdate < datead(day, 7, t1.visitdate)
group by t1.patientname
having sum(t2.hours) >= 9;
票数 0
EN

Stack Overflow用户

发布于 2017-04-12 21:53:47

下面的查询帮助您获得所需的输出:

代码语言:javascript
复制
select patient_name,week,sum(hours) as hours_served from
(
select patient_name,date,hours,week(date) as week
from temptable1
)
group by patient_name,week
having hours_served >=9;
票数 0
EN

Stack Overflow用户

发布于 2017-04-13 07:55:13

代码语言:javascript
复制
CREATE TABLE #Temp
(
    PatientName VARCHAR(32),
    VisitDate   DATE,
    [Hours]     INT
)

INSERT #Temp
VALUES

('Steve', CAST('11/2/2016' AS DATE), 1),
('Steve', CAST('11/3/2016' AS DATE), 1),
('Pete', CAST('11/1/2016' AS DATE), 3),
('Pete', CAST('11/2/2016' AS DATE), 7),
('Dave', CAST('11/1/2016' AS DATE), 3),
('Dave', CAST('11/2/2016' AS DATE), 3),
('Dave', CAST('2/2/2016' AS DATE), 3)

SELECT p.PatientName, MAX(p.HoursSum)
FROM (
    SELECT t2.PatientName, SUM(t2.[Hours]) AS HoursSum
    FROM #Temp t1
        JOIN #Temp t2 ON t1.PatientName = t2.PatientName AND t2.VisitDate BETWEEN t1.VisitDate AND DATEADD(DAY, 7, t1.VisitDate)
    GROUP BY t2.PatientName, t1.VisitDate
    HAVING SUM(t2.[Hours]) >= 9
) p
GROUP BY p.PatientName

DROP TABLE #Temp
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43380062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档