|
|
Archives of the TeradataForum
Message Posted: Tue, 05 Sep 2006 @ 13:50:35 GMT
Subj: | | Re: How to merge contiguous date ranges |
|
From: | | Dieter Noeth |
Anomy.Anom wrote:
| I have historical data in a table with start and end dates. There are some records where there are contiguous date ranges (ie the start
date of one record is end date + 1 of the previous record) for the same data values - I would like a query to merge these records. | |
| Date ranges per key never overlap, but there may be gaps. | |
If they overlap it's getting a bit more complicated :-)
I usually use nested OLAP functions for that type of question. One possible solution:
SELECT
thekey,
thevalue,
MIN(start_date) AS start_date,
NULLIF(MAX(end_date), DATE '9999-12-31') AS end_date
FROM
(
SELECT
thekey,
thevalue,
start_date,
end_date,
prev_end_date,
SUM(CASE WHEN start_date - prev_end_date <= 1 THEN 0 ELSE 1 END)
OVER (PARTITION BY thekey, thevalue
ORDER BY start_date
ROWS UNBOUNDED PRECEDING) AS grp
FROM
(
SELECT
thekey,
thevalue,
start_date,
COALESCE(end_date, DATE '9999-12-31') AS end_date,
MIN(end_date)
OVER (PARTITION BY thekey, thevalue
ORDER BY start_date
ROWS 1 PRECEDING) AS prev_end_date
FROM anomy
) dt
) dt
GROUP BY
thekey,
thevalue,
grp
ORDER BY
thekey,
start_date
| First correct answer wins a poke in the eye with a blunt stick. | |
My mom always told me:
Don't take gifts from unknown strangers...
Dieter
| |