是否根据规则将行展平为单行



我有一个结果集,看起来像这样:

date_to2021年3月31日2021年9月30日2022年3月31日2022年9月30日9999年1月1日
客户 标志 date_from
ABC123
ABC123 N 2021年2月22日
ABC123 Y 2021年4月1日
ABC123 Y 2021年10月1日
ABC123 Y 2022年4月1日
ABC123 Y 2022年10月1日

这是一个缺口和孤岛问题。一种方法使用行数差法:

WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY customer ORDER BY date_from) rn1,
ROW_NUMBER() OVER (PARTITION BY customer, flag ORDER BY date_from) rn2
FROM yourTable
)
SELECT
customer,
flag,
MIN(date_from) AS date_from,
MAX(date_to) AS date_to
FROM cte
GROUP BY
customer,
flag,
rn1 - rn2
ORDER BY
MIN(date_from);

最新更新