首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有enddate的SQL DateDiff

没有enddate的SQL DateDiff
EN

Stack Overflow用户
提问于 2012-10-24 03:49:44
回答 4查看 355关注 0票数 7

我正在使用SQL Server,我需要知道患者接受治疗的天数。

代码语言:javascript
复制
StartDate
2012-10-11 22:00:00.000
2012-10-11 23:10:31.000
2012-10-12 00:28:31.000
2012-10-12 01:39:01.000
2012-10-12 02:09:01.000
2012-10-12 03:39:01.000
2012-10-12 04:38:50.000
2012-10-20 06:00:00.000
2012-10-20 08:06:05.000
2012-10-20 10:21:55.000
2012-10-21 14:13:01.000
2012-10-21 15:13:01.000

我应该得到的答案是4天( 11天,12天,20天和21天)治疗在2012-10-12停止,新的治疗在2012-10-20开始,我如何计算患者在没有endDate的情况下仍接受治疗的天数?

谢谢,

洛佩拉姆

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-24 03:55:36

代码语言:javascript
复制
SELECT COUNT(StartDate) AS treatmentDays
FROM ...
WHERE ...
GROUP BY CAST(StartDate as date)

基本上,将日期/时间值转换为日期,按该日期值分组,然后计算有多少个。分组将把重复的日期压缩成一个单独的日期,因此您应该得到4作为您的样本数据的答案。

票数 3
EN

Stack Overflow用户

发布于 2012-10-24 04:03:27

尝尝这个

您需要获取DISTINCT日期计数

代码语言:javascript
复制
SELECT A.PATIENT_ID, COUNT(DISTINCT A.DATE)
FROM
(
    SELECT PATIENT_ID, CONVERT(VARCHAR(10), StartDate, 101) AS [DATE] --CONVERTS TO [MM/DD/YYYY] FORMAT
    FROM MY_TABLE
) A
GROUP BY A.PATIENT_ID
票数 1
EN

Stack Overflow用户

发布于 2012-10-24 04:07:03

你似乎在寻找的是一系列连续的日子。假设您使用的是SQL Server2005或更高版本,则可以采用以下方法。对于每个患者,仅提取序列中的日期。然后枚举天数。对于“治疗”来说,它们之间的差异是恒定的。

下面是一个示例:

代码语言:javascript
复制
select patientId, seqStartDate, count(*) as NumDays, sum(NumOnDay) as NumRecs,
       dateadd(day, count(*) - 1, seqStartDate) as SeqEndDate
from (select dp.*,
             row_number() over (partition by patientId order by StartDate) as seqnum,
             dateadd(day, 
                     - row_number() over (partition by patientId order by StartDate)
                     StartDate
                     ) as seqStartDate
      from (select cast(StartDate as date) as thedate, patientId, count(*) as NumOnDay
            from table
            group by cast(StartDate as date), patientId
           ) dp
     ) dp
group by patientId, seqStartDate
order by 1, 2

实际上,此语法还使用cast(<val> as date),这是SQL Server2008中用于删除时间组件的语法。如果您使用的是SQL Server2005,则还有其他方法。

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

https://stackoverflow.com/questions/13038116

复制
相关文章

相似问题

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