3

個人が四半期中に毎日服用した薬の量を判断するためのクエリを作成しようとしています。薬が処方されない日もあれば、重複する日もあり、合計量(つまり、1日の合計の強度)が必要です。薬の数、強さ、日の供給などはさまざまです。ここにいくつかのデータがあります:

create table #MemberInfo 
(ProgramName varchar(255), 
DateFilled datetime, 
DaySupply integer, 
MemberID varchar(255), 
Strength integer, 
Tradename varchar(255));

insert into #MemberInfo
Values ('InsureCo', '20130612', 30, 'MEM001', 10, 'Sedative')
, ('InsureCo', '20130429', 30, 'MEM001', 20, 'Sedative')
, ('InsureCo', '20130401', 30, 'MEM001', 20, 'Sedative')
, ('InsureCo', '20130529', 30, 'MEM001', 30, 'Sedative')

四半期中の特定の日に服用した薬の量を合計するための最良のアプローチが何であるかは、私にはまったくわかりません. できればカーソルの使用を避けたいと思います。四半期のすべての日を含む一時テーブルを作成し、それらの日付を薬を服用する毎日に結合することを考えていました (つまり、DateFilled + DaySupply までのすべての日)。四半期内のすべての薬の日付と量を把握できるようになったら、日ごとにグループ化して、毎日の強さの合計を取得できます。また、四半期にかかる平均額を取得できる必要もあります。

追加要件:

  1. 開始日と日数があります。各メンバーが処方箋を持っている日ごとに行を作成したいと思います (すべての処方箋に対して同じことを行います)。次に、毎日のすべての薬の強さを合計します。少しでも効果がある場合、すべての薬は同じクラスになり、強度は同等の用量になります。つまり、それらを合計できます.
  2. レポートを作成するには、金額がカットオフ (100 としましょう) を超える連続した日数をカウントできる必要があります。そのため、1日あたりの量を取得しようとしています。

    Desired output
    
    MemberID    Date        SumStrength
    MEM001     2013-04-29  40
    MEM001     2013-04-30  40
    MEM001     2013-05-01  20
    ETC FOR EVERY DAY FOR THIS MEMBER
    
    MEM002     2013-04-01  60
    MEM002     2013-04-02  40
    ETC FOR EVERY DAY FOR THIS MEMBER
    
4

3 に答える 3

1

単純なグループだと思います。

create table #MemberInfo 
(ProgramName varchar(255), 
DateFilled datetime, 
DaySupply integer, 
MemberID varchar(255), 
Strength integer, 
Tradename varchar(255));

insert into #MemberInfo
Values ('InsureCo', '20130612', 30, 'MEM001', 10, 'Sedative')
, ('InsureCo', '20130429', 30, 'MEM001', 20, 'Sedative')
, ('InsureCo', '20130429', 30, 'MEM002', 25, 'Sedative')
, ('InsureCo', '20130515', 30, 'MEM002', 25, 'Sedative')
, ('InsureCo', '20130401', 30, 'MEM001', 20, 'Sedative')
, ('InsureCo', '20130529', 30, 'MEM001', 30, 'Sedative')
, ('InsureCo', '20130529', 30, 'MEM003', 35, 'Sedative')
, ('InsureCo', '20130529', 30, 'MEM003', 45, 'Sedative')

select memberid,datefilled,SUM(strength) as [Strength sum]
from #MemberInfo
where memberid = 'MEM003' -- or whatever, could be a parameter
group by memberid,DateFilled

order by Memberid,DateFilled

drop table #MemberInfo
于 2013-10-02T20:09:54.750 に答える
0

I've done some playing around tonight and I'm much closer:

Some data:

create TABLE dateranges (drug VARCHAR(5), date_begin DATETIME, numdays integer,strength        integer)
INSERT into dateranges values ('DrugA', '2010-01-01', 5, 10);
INSERT into dateranges values ('DrugB', '2008-02-27', 10, 20);
INSERT into dateranges values ('DrugC', '2010-04-26', 3, 20);
INSERT into dateranges values ('DrugD', '2000-02-01', 5, 30);

A CTE:

WITH cte (id, d, s)
     AS (SELECT tbl.drug AS id
                ,tbl.date_begin AS d
                ,tbl.strength AS s
           FROM dateranges tbl
          WHERE DATEDIFF(DAY, tbl.date_begin, tbl.date_begin+numdays-1) <= 100
         UNION ALL
         SELECT tbl.drug AS id
                ,DATEADD(DAY, 1, cte.d) AS d
                ,tbl.strength as s
           FROM cte
                INNER JOIN dateranges tbl
                  ON cte.id = tbl.drug
          WHERE cte.d < tbl.date_begin+numdays-1)
SELECT id AS drug
       ,d AS dates
       ,s AS strength
  FROM cte
 ORDER BY id, d, s

Results:

DRUG    DATES   STRENGTH
DrugA   January, 01 2010 00:00:00+0000  10
DrugA   January, 02 2010 00:00:00+0000  10
DrugA   January, 03 2010 00:00:00+0000  10
DrugA   January, 04 2010 00:00:00+0000  10
DrugA   January, 05 2010 00:00:00+0000  10
DrugB   February, 27 2008 00:00:00+0000 20
DrugB   February, 28 2008 00:00:00+0000 20
DrugB   February, 29 2008 00:00:00+0000 20
DrugB   March, 01 2008 00:00:00+0000    20
DrugB   March, 02 2008 00:00:00+0000    20
DrugB   March, 03 2008 00:00:00+0000    20
DrugB   March, 04 2008 00:00:00+0000    20
DrugB   March, 05 2008 00:00:00+0000    20
DrugB   March, 06 2008 00:00:00+0000    20
DrugB   March, 07 2008 00:00:00+0000    20
DrugC   April, 26 2010 00:00:00+0000    20
DrugC   April, 27 2010 00:00:00+0000    20
DrugC   April, 28 2010 00:00:00+0000    20
DrugD   February, 01 2000 00:00:00+0000 30
DrugD   February, 02 2000 00:00:00+0000 30
DrugD   February, 03 2000 00:00:00+0000 30
DrugD   February, 04 2000 00:00:00+0000 30
DrugD   February, 05 2000 00:00:00+0000 30

From here, I plan on grouping by drug, date, strength (summing strength). I should be able to toss those results into a temp table, and then count the number of days over the threshold I mentioned.

于 2013-10-03T01:52:14.077 に答える