7

SQL Serverを使用していますが、患者が治療を受けていた日数を知る必要があります。問題は、startDateしか取得できず、endDateは取得できないことです。クエリを実行してStartDateで並べ替えると、次のようになります。

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がないにもかかわらず治療?

ありがとうございました、

ロペラム

4

4 に答える 4

3
SELECT COUNT(StartDate) AS treatmentDays
FROM ...
WHERE ...
GROUP BY CAST(StartDate as date)

基本的に、日付/時刻の値を日付だけに変換し、その日付の値でグループ化してから、その数を数えます。グループ化により、繰り返される日付が1つにまとめられるため、サンプルデータを指定すると、回答として4を取得する必要があります。

于 2012-10-23T19:55:35.673 に答える
1

これを試して

DISTINCT日付カウントを取得する必要があります

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
于 2012-10-23T20:03:27.073 に答える
0

あなたが探しているように見えるのは、連続した日のシーケンスです。SQL Server 2005以降を使用していると仮定すると、次のアプローチを取ることができます。各患者について、シーケンス内の日のみを抽出します。次に、日数を列挙します。これらの違いは、「治療」では一定になります。

次に例を示します。

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)では、時間コンポーネントを削除するためのSQLServer2008構文も使用されます。SQL Server 2005を使用している場合は、別の方法があります。

于 2012-10-23T20:07:02.870 に答える
0

に存在する一意の日数の合計を取得したいだけの場合はStartDate、次を使用できます。

SELECT COUNT(IndividualDays)
FROM
    (SELECT DISTINCT CONVERT(VARCHAR(10), StartDate, 111) AS IndividualDays
     FROM TreatmentTable) AS A

これは、datetime値を日付部分だけに変換し、重複を削除するだけです。その後、返される行数は一意の日数と同じになるため、カウントが取得されます。

于 2012-10-23T20:10:47.287 に答える