【发布时间】:2015-03-26 11:25:39
【问题描述】:
我有这个问题
Select distinct
patient.id as Patient_ID
from
patient
inner join
......
where
incident.completionDate Between Convert(smalldatetime, '01/02/2015', 103) and Convert(smalldatetime, '04/03/2015', 103)
我想让它从开始日期到今天递归运行。
我试过这样:
;WITH CTE AS
(--gets you data from 01/01/2014 till current date
SELECT
patient.id as Patient_ID,
Convert(smalldatetime, '01/01/2014', 103) start
FROM
patient
INNER JOIN
.......
WHERE
incident.completionDate Between Convert(smalldatetime, '01/01/2014', 103) and Convert(smalldatetime, GETDATE(), 103)
UNION ALL
SELECT
incident.Patient_ID,
CONVERT(VARCHAR(25), DATEADD(dd, -(DAY(DATEADD(mm,1,start))-1), DATEADD(mm, 1, start)), 103) start
FROM
cte incident
WHERE
incident.Patient_ID Between CONVERT(smalldatetime, DATEADD(dd, -(DAY(DATEADD(mm, 1, start)) - 1), DATEADD(mm, 1, start)), 103) and Convert(smalldatetime, GETDATE(), 103)
and CONVERT(smalldatetime,DATEADD(dd,-(DAY(DATEADD(mm,1,start))-1),DATEADD(mm,1,start)),103) <= Convert(smalldatetime, GETDATE(), 103)
)
select *
from cte
但现在我收到一个错误:
锚点和列中递归部分的类型不匹配 递归查询“CTE”的“开始”。
你能帮我解决这个错误吗?
【问题讨论】:
标签: sql-server-2008 common-table-expression