작성중인 쿼리에 대한 도움이 필요합니다. 기본적으로 한 테이블에서 모든 GRNID를 선택하고 싶지만 다른 테이블의 날짜 사이에 있어야합니다.
따라서 ABSPeriodEndDate 테이블에서 찾은 두 날짜 사이의 모든 GRN을 원합니다. between 절의 시작 날짜를 찾으려면 MAX 기간을 찾은 다음 마이너스 1과 최대 연도를 찾아야합니다.
between 절의 종료 날짜를 찾으려면 최대 기간과 연도를 모두 찾아야합니다. 하지만 DateStamp 열이 between 절에 대한 결과를 반환하기를 원합니다.
이 문제를 해결하는 방법에 대한 아이디어가 내가 원하는대로 작동하지 않는 것 같습니다.
내 쿼리는 다음과 같습니다.
SELECT tblGRNItem.GRNID
FROM tblGRNItem
INNER JOIN ABSPeriodEndDates ON tblGRNItem.DateCreated = ABSPeriodEndDates.DateStamp
WHERE tblGRNItem.DateCreated BETWEEN
SELECT ABSPeriodEndDates.DateStamp FROM ABSPeriodEndDates WHERE ABSPeriodEndDates.DateStamp = (SELECT MAX(ABSPeriodEndDates.Period)-1 FROM ABSPeriodEndDates)
AND ABSPeriodEndDates.Year = (SELECT MAX(ABSPeriodEndDates.Year)))
AND
SELECT ABSPeriodEndDates.DateStamp FROM ABSPeriodEndDates WHERE ABSPeriodEndDates.DateStamp = (SELECT MAX(ABSPeriodEndDates.Period) FROM ABSPeriodEndDates)
AND ABSPeriodEndDates.Year = (SELECT MAX(ABSPeriodEndDates.Year)))
참고 : ABSPeriodEndDates의 DataStamp는 datetime2 데이터 유형이고 tblGRNItem의 DateCreated는 datetime 데이터 유형입니다.
예제 데이터 :
tblGRNItem ABSPeriodEndDates
GRNID || DateCreated Year || Period || DateStamp
1 || 01/01/2015 2015 || 1 || 01/01/2015 00:00:01
2 || 05/01/2015 2015 || 1 || 01/01/2015 00:00:01
3 || 06/02/2015 2015 || 2 || 01/02/2015 00:00:01
4 || 09/02/2015 2015 || 2 || 01/02/2015 00:00:01
5 || 19/02/2015 2015 || 2 || 01/02/2015 00:00:01
6 || 16/03/2015 2015 || 3 || 01/03/2015 00:00:01
따라서 가장 큰 기간 빼기 1은 2이고 가장 큰 기간은 3이기 때문에 날짜 스탬프 01/02/2015 00:00:01과 01/03/2015 00:00:01 사이의 tblGRNItem에서 모든 GRNID를 가져오고 싶습니다. 데이터 유형은 tblGRNitem의 datetime 및 ABSPeriodEndDates의 datetime2이므로 결과는 다음과 같아야합니다.
3 || 06/02/2015
4 || 09/02/2015
5 || 19/02/2015
미리 감사드립니다
데이터를 모르면 답을 줄 수 없습니다. ABSPeriodEndDates와 tblGrnItem 사이에 연결이없는 것처럼 보입니다. 당신은 단지 최신 기간의 범위를 찾고 싶습니까?
이런 식으로 할 수 있습니다.
WITH MaxDat AS
(
SELECT MAX(DateStamp) AS MaxDatFound
FROM ABSPeriodEndDates
)
,MinDat AS
(
SELECT TOP 1 DateStamp AS MinDatFound
FROM ABSPeriodEndDates
WHERE DateStamp<(SELECT MaxDatFound FROM MaxDat)
ORDER BY DateStamp DESC
)
SELECT *
FROM tblGRNItem
WHERE DateCreated BETWEEN (SELECT MinDatFound FROM MinDat) AND (SELECT MaxDatFound FROM MaxDat)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다