Один подход был бы ниже.
WITH T1( Code, Date, Flag) AS
(
SELECT Code, DateFrom, 1 AS Flag
FROM dbo.Test
UNION ALL
SELECT Code, dateTo, -1 AS Flag
FROM dbo.Test
), T2 AS
(
SELECT *, SUM(Flag) OVER (PARTITION BY Code ORDER BY Date ROWS UNBOUNDED PRECEDING) AS ActiveMembershipCount
FROM T1
), T3 AS
(
SELECT *, LAG(ActiveMembershipCount,1,0) OVER (PARTITION BY Code ORDER BY Date) AS PrevActiveMembershipCount
FROM T2
), T4 AS
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY Code ORDER BY Date)-1 AS RN
FROM T3
WHERE 0 IN (ActiveMembershipCount, PrevActiveMembershipCount)
)
SELECT Code, MIN(Date), MAX(Date)
FROM T4
GROUP BY Code, RN/2
HAVING MIN(Date) <= '2018-07-01' AND MAX(Date) >= '2018-12-31'
NB. Я не проверял это строго по сценарию, когда членство заканчивается и перезапускается в один и тот же день, поэтому может потребоваться некоторые настройки, но базовый подход будет работать.
Оказывается что поиск с помощью Google для шаблона:: профилирование инструментария приводит к лучшему результату, статье с ноября 2005 Randal Schwartz. Я не могу скопировать и вставить любую статью здесь из-за авторского права, но достаточным, чтобы сказать, что Вы просто получаете его источник и используете его в качестве модуля после шаблона, как так:
use Template;
use My::Template::Context;
И Вы будете произведены как это к STDERR, когда Ваш сценарий будет работать:
-- info.html at Thu Nov 13 09:33:26 2008: cnt clk user sys cuser csys template 1 0 0.06 0.00 0.00 0.00 actions.html 1 0 0.00 0.00 0.00 0.00 banner.html 1 0 0.00 0.00 0.00 0.00 common_javascript.html 1 0 0.01 0.00 0.00 0.00 datetime.html 1 0 0.01 0.00 0.00 0.00 diag.html 3 0 0.02 0.00 0.00 0.00 field_table 1 0 0.00 0.00 0.00 0.00 header.html 1 0 0.01 0.00 0.00 0.00 info.html 1 0 0.01 0.01 0.00 0.00 my_checklists.html 1 0 0.00 0.00 0.00 0.00 my_javascript.html 1 0 0.00 0.00 0.00 0.00 qualifier.html 52 0 0.30 0.00 0.00 0.00 referral_options 1 0 0.01 0.00 0.00 0.00 relationship_block 1 0 0.00 0.00 0.00 0.00 set_bgcolor.html 1 0 0.00 0.00 0.00 0.00 shared_javascript.html 2 0 0.00 0.00 0.00 0.00 table_block 1 0 0.03 0.00 0.00 0.00 ticket.html 1 0 0.08 0.00 0.00 0.00 ticket_actions.html -- end
Обратите внимание, что блоки, а также отдельные файлы перечислены.
Это, по моему скромному мнению, намного более полезно, чем Шаблон модуля CPAN:: Таймер.