4
我有一個看起來像一些樣本數據:(編輯:我沒有SQL Server 2012中)仿效SQL Server和LINQ 2012滯後窗口功能
create table #base
(pat_id int
,admission_date date
,discharge_date date
)
go
insert into #base
values
(1, '2007-01-04', '2007-01-04'),
(1, '2007-01-10', '2007-01-10'),
(1, '2007-01-11', '2007-01-11'),
(1, '2007-01-18', '2007-01-18'),
(1, '2007-01-24', '2007-01-24'),
(1, '2008-01-25', '2008-01-26'),
(2, '2007-02-01', '2007-02-01'),
(2, '2007-02-06', '2007-02-06'),
(2, '2007-02-07', '2007-02-07'),
(2, '2007-02-08', '2007-02-08')
這裏的SQL查詢我想效仿與LINQ
;with cte
as
(
select pat_id
,admission_date
,discharge_date
,ROW_NUMBER() over(partition by pat_id order by admission_date asc) as rn
from #base
)
select firstCte.pat_id
,firstCte.discharge_date as firstAdmitReference
,secondCte.admission_date as dischargeReference
,case when DATEDIFF(DAY,firstCte.discharge_date,secondCte.admission_date) <= 30 then 1 else 0 end Readmit
from cte as firstCte
inner join cte as secondCte
on firstCte.pat_id = secondCte.pat_id
where firstCte.rn = secondCte.rn -1
下面是查詢的結果是什麼樣子:
create table #readmit_data
(pat_id int
,admission_date date
,discharge_date date
,within_x_days int
)
insert into #readmit_data(pat_id,admission_date,discharge_date,within_x_days)
values
(1, '2007-01-04', '2007-01-10', 1),
(1, '2007-01-10', '2007-01-11', 1),
(1, '2007-01-11', '2007-01-18', 1),
(1, '2007-01-18', '2007-01-24', 1),
(1, '2007-01-24', '2008-01-25', 0),
(2, '2007-02-01', '2007-02-06', 1),
(2, '2007-02-06', '2007-02-07', 1),
(2, '2007-02-07', '2007-02-08', 1)
在這個結果集中日的基本格式È數據是
patient ID dischargeDate nextVisitAdmitDate
A 1在within_x_days
列表示患者有重新接納與他們的最後放電30天。理想情況下,30
將是用戶輸入的變量。
LINQ中有什麼樣的構造可用於做到這一點?
你想在LINQ to SQL查詢中使用#Temp表嗎?它不能做到。 – thepirat000
是*#base *和*#temp *代碼中的同一個表嗎? – thepirat000
@ thepirat000 #base和#temp是一樣的。我實際上並不想查詢臨時表,我希望其他人能夠快速查看問題,所以我添加了SQL腳本。 – wootscootinboogie