我有下表
约会
Apptdate Datetime,
提供者Varchar,
设施数字,
PatientId Numeric,
ApptType Varchar,
Notes Varchar,
等
我试图获得以下内容
负责任的提供者
PatientID,
ResponsibleProvider
负责任的提供商应该是过去一年中看到最多的提供商,但如果有人在去年有两次看到两个提供商,那么应该列出最近看到的提供商。我想用这个来找到在一个时间框架内看到的所有患者的负责任的提供者。我怎么能在SQL中做到这一点?
到目前为止,我创建了一个临时表,其中列出了患者,他们已经看过的提供者以及患者在去年看到这些提供者的时间。 SQL在
之下CREATE TABLE #ProviderApptCount(
Patientid Numeric,
Provider Varchar,
Count Numeric,
Mostrecentvisit Date
)
INSERT INTO #ProviderApptCount
SELECT a.PatientId, a.Provider, COUNT(a.Provider), MAX(a.Apptdate)
FROM Appointments a
WHERE a.Apptdate BETWEEN DATEADD(YY, -1, GETDATE()) AND GETDATE()
AND a.FacilityId LIKE 2
GROUP BY a.PatientId, a.Provider
同样,如果最常见的提供商存在平局,我如何获得最常见的提供商和最近看到的提供商?此列表应该让每位患者在一个时间范围内与“负责任的提供者”联系。如果可能,请在他们的名字旁边。
对不起任何混淆
谢谢!
答案 0 :(得分:0)
你可以用ROW_NUMBER做到这一点,但可能你需要的前1名。这样的事情。
SELECT top 1 a.PatientId
, a.Provider
, COUNT(a.Provider)
, a.Apptdate
FROM Appointments a
WHERE a.Apptdate BETWEEN DATEADD(YY, -1, GETDATE()) AND GETDATE()
AND a.FacilityId LIKE 2 --Perhaps this should be = instead of LIKE?
GROUP BY a.PatientId
, a.Provider
, a.ApptDate
order by COUNT(a.Provider) desc
, a.Apptdate desc
- 编辑 -
为了能够检索所有患者,您需要实施ROW_NUMBER。这样的事情应该非常接近。
select x.PatientId
, x.Provider
, x.PatientCount
, x.ApptDate
from
(
SELECT a.PatientId
, a.Provider
, PatientCount = COUNT(a.Provider) over(partition by a.PatientId)
, a.Apptdate
, RowNum = ROW_NUMBER() over (partition by a.PatientId order by COUNT(a.Provider) desc, a.Apptdate desc)
FROM Appointments a
WHERE a.Apptdate BETWEEN DATEADD(YY, -1, GETDATE()) AND GETDATE()
AND a.FacilityId LIKE 2 --Perhaps this should be = instead of LIKE?
GROUP BY a.PatientId
, a.Provider
, a.ApptDate
) x
where x.RowNum = 1
答案 1 :(得分:0)
我不清楚你的问题。请试试这个
$bear= Session::get('data');
$fish = new fish;
$fish->fish_location=$request->fish_location
$fish->fish_type =$request->fish_type;
$fish->save();
$fish->bears()->associate($bear);