누군가가 이것을 도와 줄 수 있기를 바랍니다. 아래에 간단한 예제를 넣었습니다. 청구 목적으로 청구 날짜에 맞는 만기일을 설정하려면 공휴일과 주말을 건너 뛰야합니다. 나는 회사를 위해 모든 휴일을 지키는 휴일 테이블을 가지고있다. (그리고 토요일과 같은 주말을 포함 할 수도있다. 은행과 같은 회사는 아직 확실하지 않다.테이블에서 연속 휴일/주말을 계산하십시오.
연속 주말 플러스 데이터베이스에서 연휴를 알아야합니다. 예를 들어 데이터베이스에 휴가 데이터의 경우
는 :
EXCP_DATE ID
----------- ---------- -------------------- ----------
3/29/2013 1
4/1/2013 1
12/9/2013 1
12/10/2013 1
12/25/2013 1
12/26/2013 1
12/27/2013 1
12/28/2013 1
나는 "발행 수"열에서 휴일 및 주말의 번호가 필요합니다. 연휴/주말 내 CONSECUTIVE_DAY는 : 1 날짜가
ID EXCP_DATE WeekDay CONSECUTIVE_DAY OCCURENCES
1 3/29/2013 FRIDAY 1 3
2 4/1/2013 MONDAY 0 1
3 12/9/2013 MONDAY 1 2
4 12/10/2013 TUESDAY 0 1
5 12/25/2013 WEDNESDAY 1 5
6 12/26/2013 THURSDAY 1 4
7 12/27/2013 FRIDAY 1 3
8 12/28/2013 SATURDAY 1 2
아래는 대부분의 경우에 작동하는 쿼리입니다 연휴/주말을 의미합니다. 그것은 한 단계 만 이끌어 가면서 연속 휴일이 2 회 이상일 때만 실패합니다.
SELECT A.*
,CASE
WHEN CONSECUTIVE_DAY = 1
THEN CASE
WHEN upper(datename(weekday, EXCP_DATE)) = 'FRIDAY'
AND LEAD(EXCP_DATE) OVER (
ORDER BY EXCP_DATE
) = (EXCP_DATE + 3)
THEN DATEdiff(dd, EXCP_DATE, LEAD(EXCP_DATE) OVER (
ORDER BY EXCP_DATE
)) + 1
WHEN upper(datename(weekday, EXCP_DATE)) = 'FRIDAY'
AND LEAD(EXCP_DATE) OVER (
ORDER BY EXCP_DATE
) <> (EXCP_DATE + 3)
THEN 3
ELSE DATEdiff(dd, EXCP_DATE, LEAD(EXCP_DATE) OVER (
ORDER BY EXCP_DATE
)) + 1
END
ELSE CONSECUTIVE_DAY
END OCCURENCES
FROM (
SELECT T.*
,upper(datename(weekday, EXCP_DATE)) WeekDay
,Lead(EXCP_DATE, 1, EXCP_DATE) OVER (
ORDER BY EXCP_DATE
) Lead
,EXCP_DATE + 1 [EXCP_DATE + 1]
,EXCP_DATE + 3 [EXCP_DATE +3]
,datename(weekday, EXCP_DATE + 3) [DateName_EXCP_DATE +3]
,
---------------------------
CASE
WHEN Lead(EXCP_DATE, 1, EXCP_DATE) OVER (
ORDER BY EXCP_DATE
) = EXCP_DATE + 1
THEN 1
WHEN upper(datename(weekday, EXCP_DATE)) = 'FRIDAY'
AND LEAD(EXCP_DATE) OVER (
ORDER BY EXCP_DATE
) = EXCP_DATE + 3
THEN 1
WHEN upper(datename(weekday, EXCP_DATE)) = 'SATURDAY'
AND LEAD(EXCP_DATE) OVER (
ORDER BY EXCP_DATE
) = EXCP_DATE + 2
THEN 1
ELSE 0
END CONSECUTIVE_DAY
FROM TEST1 T
) A
----------------------------------- 숫자 5와 6이 올바르지 않습니다. . 리드에서 재귀를 수행하려면 어떻게해야합니까?
그 결과 어떤 도움
ID EXCP_DATE WeekDay Lead EXCP_DATE + 1 EXCP_DATE +3 DateName_EXCP_DATE +3 CONSECUTIVE_DAY OCCURENCES
1 3/29/2013 FRIDAY 4/1/2013 3/30/2013 4/1/2013 Monday 1 4
2 4/1/2013 MONDAY 12/9/2013 4/2/2013 4/4/2013 Thursday 0 0
3 12/9/2013 MONDAY 12/10/2013 12/10/2013 12/12/2013 Thursday 1 2
4 12/10/2013 TUESDAY 12/25/2013 12/11/2013 12/13/2013 Friday 0 0
5 12/25/2013 WEDNESDAY 12/26/2013 12/26/2013 12/28/2013 Saturday 1 2
6 12/26/2013 THURSDAY 12/27/2013 12/27/2013 12/29/2013 Sunday 1 2
8 12/27/2013 FRIDAY 12/28/2013 12/28/2013 12/30/2013 Monday 1 3
7 12/28/2013 SATURDAY 12/28/2013 12/29/2013 12/31/2013 Tuesday 0 0
감사합니다.
누구나이 내용을 읽고 이해하기를 어떻게 기대합니까? 게시물의 형식을 적절하게 지정하십시오. – EkoostikMartin
코드가 SQL Server (및 버전 2012+)와 비슷해 보이기 때문에 sql-server 태그를 추가했습니다. –