我的表格如下:
KEY_NAME START_DATE END_DATE
X 01.01.2014 01.07.2014
X 01.02.2014 15.02.2014
X 01.03.2014
X 01.05.2014
X 01.07.2014
Y 01.01.2014
Y 06.01.2014 16.10.2014
Y 30.05.2014 17.09.2014
Y 04.08.2014
从每KEY_NAME
的第3个订单开始,我想采用START_DATE
并将其与之前行的END_DATE
进行比较,并使用相同的KEY_NAME
(将第3 START_DATE
的{{1}}与第2行和第1行的KEY_NAME
进行比较)
我需要END_DATE
为END_DATE
或大于当前NULL
的前一行数。
我想要的输出(列START_DATE
):
COUNT
答案 0 :(得分:1)
您可以使用分析函数ROW_NUMBER()
来确定每key_name
的排名,然后选择符合条件的行数。
我认为您的行的顺序由start_date
确定,但在选择ORDER BY
时您可以使用任何其他ROW_NUMBER()
。
使用SQL Fiddle进行测试。
WITH cte AS
(
SELECT t.*, ROW_NUMBER() OVER ( PARTITION BY key_name ORDER BY start_date ) AS ord
FROM t
)
SELECT key_name, ord,
(
SELECT COUNT(1)
FROM cte cte_prev
WHERE cte_prev.key_name = cte.key_name
AND cte_prev.ord < cte.ord
AND ( cte_prev.end_date >= cte.start_date OR cte_prev.end_date IS NULL )
) AS cnt
FROM cte
WHERE cte.ord >= 3
ORDER BY cte.key_name, cte.ord;