Hie 다음과 같이 3 개의 테이블과 해당 행에서 데이터를 추출하고 싶습니다.
**RentalAgreement – CustID,AgreementID(PK) and AgreementDate **Movie Rented – AgreementID(PK), RentalAmount and PercentReductionApplied,MovieID(FK) **Movie – MovieID(PK), Name, Released
현재 데이터가 아닌 테이블을 기반으로 지난 30 일의 데이터를 표시해야하는 경우. 이것을 달성하기 위해 어떻게 갈 수 있습니까? 내 시도 :
SELECT TRIM(CustID),AgreementDate , RentalAmount
,PercentReductionApplied , MovieID , Name , Released
FROM RentalAgreement, MovieRented, Movie
WHERE RentalAgreement.AgreementID = MovieRented.AgreementID
AND Movie.MovieID = MovieRented.MovieID
AND AgreementDate BETWEEN MAX(AgreementDate) AND MAX(AgreementDate)-30;
문제는 MAX (계약일)에 있습니다. 이것은 집계 함수입니다. WHERE 절이 처리 된 후 쿼리의 마지막 단계 (SELECT 절에서)에서만 액세스 할 수 있습니다. 즉, MAX를 먼저 계산하려면 다른 쿼리가 필요하며 전체 (외부) 쿼리에서 하위 쿼리로 사용합니다.
또한 최신 SQL 표준 조인 구문을 사용하는 것이 가장 좋습니다. 이 두 가지를 합치면 :
SELECT TRIM(CustID),AgreementDate , RentalAmount
,PercentReductionApplied , MovieID , Name , Released
FROM RentalAgreement
join MovieRented on RentalAgreement.AgreementID = MovieRented.AgreementID
join Movie on Movie.MovieID = MovieRented.MovieID
cross join (select max(agreementdate) as max_date from rentalagreement) m
where AgreementDate BETWEEN m.max_date AND m.max_date - 30;
TRIM (custID)이 필요한 이유는 무엇입니까? 아주 드문 일입니다. 또한 MovieRented에서 AgreementID가 PRIMARY 키라는 것이 이상합니다. 그러나 이것이 귀하의 쿼리가 작동하지 않은 이유가 아닙니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다