[英]Query Results For Consecutive Months In Column Grouped By Value
以下是示例数据:
Name | Hours | RDate | Company |
------------------------------------
A |0 |2014-08-01 |W
A |0 |2014-07-01 |W
A |0 |2014-06-01 |W
A |0 |2014-05-01 |W
B |0 |2014-08-01 |X
C |0 |2014-07-01 |Y
C |0 |2014-06-01 |Y
D |0 |2014-08-01 |V
D |0 |2014-07-01 |Z
以下是我想要的结果:
Name | Hours | RDate | Company |
------------------------------------
A |0 |2014-08-01 |W
A |0 |2014-07-01 |W
A |0 |2014-06-01 |W
A |0 |2014-05-01 |W
C |0 |2014-07-01 |Y
C |0 |2014-06-01 |Y
所以问题是:
对于相同的name
和name
,我如何仅在RDate
连续的月份中获得结果,即列RDate
年1月1日, RDate
年7月1 2014-08-01, 2014-07-01
( RDate
年8月1日, RDate
年6月1 2014-08-01, 2014-06-01
)同company
我认为这是“连续日期分组岛”问题的一种变体。
;WITH Cte AS(
SELECT *,
RN = DATEADD(MONTH, - ROW_NUMBER() OVER (PARTITION BY Name, Company ORDER BY RDate), RDate)
FROM Test
)
,CteCount AS(
SELECT *,
CC = COUNT(*) OVER(PARTITION BY Name, Company, RN)
FROM Cte
)
SELECT
Name, Hours, RDate, Company
FROM CteCount
WHERE CC > 1
尽管@wewesthemenace的答案效率更高,但我还是尝试使用自己正在尝试的解决方案弄清楚自己的想法,并且它可以工作。 将先前标记的答案保留为已标记,因为这样更好。 这实际上也很好:
SELECT
one.*
FROM
foo one
INNER JOIN
foo two
ON
(one.Name = two.Name and one.Company = two.Company)
WHERE
CONVERT(int,FORMAT(two.Date, 'yyyyMM')) - CONVERT(int,FORMAT(one.ACSS_Date, 'yyyyMM')) = 1
ORDER BY
one.Name
,one.Date DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.