我有一個表dbo.MyDates
:從由日期行的表,如何計算行數其中的日期是在一定的時間範圍
date
--------
'08/28/2012'
'01/10/2013'
'02/05/2013'
和一張桌子dbo.People
:
id name dateRangeStart dateRangeEnd
--- ------ -------------- ------------
100 Mike '08/01/2012' '11/15/2012'
101 John '08/01/2012' '02/01/2013'
102 Claire '12/01/2012 '03/15/2013'
103 Mary '03/01/2013' '05/01/2013'
我試圖做的是檢查,如果每個行日期1 -3是一個特定日期範圍內的總再在範圍內的日期數:
id name totalDaysWithinRange
--- ------ --------------------
100 Mike 1
101 John 2
102 Claire 2
103 Mary 0
這樣我就可以在簡單的數學計算中使用totalDaysWithinRange
。我知道如何使用來自其他語言(如Java和PHP)的while循環,但基於我的研究,似乎在T-SQL中最好使用遞歸CTE。我過去使用過CTE,所以我知道它們是如何工作的,但我從未使用過遞歸CTE。以下是我想出了:
WITH cte AS
(
SELECT
p.id AS personID,
p.name AS personName,
p.dateRangeStart AS drs,
p.dateRangeEnd AS dre,
d.date AS checkedDate
FROM dbo.MyDates AS d, dbo.People AS p
WHERE d.date BETWEEN p.dateRangeStart AND p.dateRangeEnd
UNION ALL
SELECT
cte.personID,
cte.personName,
cte.drs,
cte.dre,
cte.checkedDAte
FROM cte
INNER JOIN dbo.MyDates AS d
ON d.date = cte.checkedDate
)
SELECT
p.id
p.name,
COUNT(cte.personID)
FROM cte AS c
INNER JOIN dbo.Person AS p ON p.id = c.personID)
;
我想不通的是如何計算的金額,這樣我可以在SELECT from cte
使用它們。謝謝你的幫助。
工作很好。謝謝。 –