我需要一列內找到日期範圍和以簡明的格式它們序列化(start
- end
爲一系列或date
對於單日期範圍)。序列化在一個「範圍」格式的日期,而無需使用過程
我有一個CTE(readings
)返回類似於一個數據集:
ID VALUE DATE
1234567 A 2012-05-09
1234567 A 2012-05-10
1234567 A 2012-05-11
1234567 A 2012-05-16
1234567 A 2012-05-17
1234567 A 2012-05-20
1234567 B 2012-05-11
1234567 B 2012-05-12
1234567 B 2012-05-13
1234567 B 2012-05-14
我已經能夠得到:
ID VALUE TOTAL_DAYS DATES
1234567 A 6 2012-05-09; 2012-05-10; 2012-05-11; 2012-05-16; 2012-05-17; 2012-05-20
1234567 B 4 2012-05-11; 2012-05-12; 2012-05-13; 2012-05-14
使用:
readings AS (
...
)
,
reading_aggr AS (
SELECT ID, [VALUE]
,count(distinct date) TOTAL_DAYS
,STUFF((
SELECT '; ' + cast(date as varchar)
FROM readings r0
WHERE id=r0.id
AND value=r0.value
ORDER BY date
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)'
),1,2,'') AS DATES
FROM readings
GROUP BY id, [value]
)
SELECT * FROM readings_aggr
我想格式化爲:
ID VALUE TOTAL_DAYS DATES
1234567 A 6 2012-05-09 - 2012-05-11; 2012-05-16 - 2012-05-17; 2012-05-20
1234567 B 4 2012-05-11 - 2012-05-14
這可能不使用程序方法嗎?
您的查詢沒有使用程序,所以我不知道問題究竟是什麼。 – 2015-02-06 14:53:25
我不希望有人發佈解決方案,將查詢重新設計爲存儲過程。 – craig 2015-02-06 15:12:23