Итак, я скачал набор данных NADA C, в котором с течением времени рассматриваются рыночные цены на фармацевтические препараты. Его можно найти здесь: https://data.medicaid.gov/Drug-Pricing-and-Payment/NADAC-National-Average-Drug-Acquisition-Cost-/a4y5-998d/data
Я заинтересован в том, чтобы получить цену за единицу для каждого ND C для всех кварталов в течение 2014 года. Однако существует ряд проблем это мешает мне сделать это. Перед преобразованием дат за квартал я сначала выполнил запрос, чтобы изолировать ND C, за цену за единицу, и дата охватывает временную таблицу:
IF OBJECT_ID('tempdb..#TortelliniExpress') IS NOT NULL DROP TABLE #TortelliniExpress
Select NDC as NDC, NADAC_Per_Unit as NADAC_Per_Unit,
convert(date,Effective_Date) as Effective_Date ,
CONVERT(date,[As of Date]) as As_Of_Date
into #TortelliniExpress
from dbo.NADAC2
Вывод выглядит так:
NDC |NADAC_Per_Unit |Effective_Date| As_of_date|
2197590 4.23 2014-02-19 2014-12-03
2197590 4.65 2014-12-04 2014-12-24
2322730 7.12 2014-02-19 2014-06-18
2322730 7.76 2014-06-19 2014-08-06
2322730 7.82 2014-08-20 2014-12-03
2322830 7.22 2014-02-19 2014-04-09
2322830 7.78 2014-08-20 2014-11-26
2322830 8.95 2014-12-04 2014-12-31
2322930 7.79 2014-02-19 2014-06-18
2322930 8.47 2014-08-20 2014-11-12
2322930 8.49 2014-06-19 2014-07-09
2323130 13.03 2014-01-22 2014-12-31
2323560 6.26 2014-05-21 2014-12-03
2323830 7.17 2014-02-19 2014-05-14
2323830 7.82 2014-06-19 2014-07-09
2323830 7.82 2014-08-20 2014-10-08
2323830 8.99 2014-12-04 2014-12-10
2323930 7.76 2014-02-19 2014-03-19
2323930 8.46 2014-06-19 2014-07-02
2323930 8.47 2014-08-20 2014-11-19
2324001 7 2014-09-17 2014-12-03
2324030 7 2014-09-17 2014-10-29
2324033 7 2014-09-17 2014-10-15
2324090 7 2014-09-17 2014-12-10
Как вы можете заметить, проблема в том, что даты не структурированы так, что следующая дата вступления в силу является предшествующей датой, и поэтому я не могу получить выходные данные, которые содержат цена за квартал 1,2,3,4 года. При выполнении этого запроса:
IF OBJECT_ID('tempdb..#quarterspans') IS NOT NULL DROP TABLE #quarterspans
select distinct NDC, Nadac_per_unit,
DATEPART(Year,Effective_Date) as Start_Year,
DATEPART(Year,As_Of_Date) as End_Year,
DATEPART(QUARTER,Effective_Date) as Start_Quarter,
DATEPART(QUARTER,As_Of_Date) as End_Quarter
into #quarterspans
from #TortelliniExpress
group by NDC,
Nadac_per_unit,
DATEPART(Year,Effective_Date),
DATEPART(Year,As_Of_Date),
DATEPART(QUARTER,Effective_Date),
DATEPART(QUARTER,As_Of_Date)
order by NDC asc,NADAC_Per_Unit;
Кварталы выстраиваются не совсем так, как хотелось бы. Что именно мне здесь делать?
РЕДАКТИРОВАТЬ
Так что я думаю, что, возможно, решил проблему. Благодаря комментариям я отредактировал свой код так:
IF OBJECT_ID('tempdb..#TortelliniExpress') IS NOT NULL DROP TABLE #TortelliniExpress
Select NDC as NDC, NADAC_Per_Unit as NADAC_Per_Unit,
convert(date,Effective_Date) as Effective_Date ,
CONVERT(date,[As of Date]) as As_Of_Date
into #TortelliniExpress
from dbo.NADAC2;
IF OBJECT_ID('tempdb..#table2') IS NOT NULL DROP TABLE #table2
select NDC,nadac_per_unit,effective_date,Max(As_Of_Date) as As_Of_Date
into #table2
from #TortelliniExpress
where YEAR(Effective_Date) = 2014 AND
YEAR(As_Of_Date) = 2014
group by NDC,nadac_per_unit,effective_date
order by NDC, NADAC_Per_Unit;
IF OBJECT_ID('tempdb..#quarterspans') IS NOT NULL DROP TABLE #quarterspans
select NDC, Nadac_per_unit,
DATEPART(Year,Effective_Date) as Start_Year,
DATEPART(Year,As_Of_Date) as End_Year,
DATEPART(QUARTER,Effective_Date) as Start_Quarter,
DATEPART(QUARTER,As_Of_Date) as End_Quarter
into #quarterspans
from #TortelliniExpress
order by NDC asc,NADAC_Per_Unit;
select NDC,avg(NADAC_Per_Unit) as Per_Unit_price,End_Year,End_Quarter
from #quarterspans
group by NDC,
End_Year,
End_Quarter
order by NDC,End_Year,End_Quarter;