SELECT A.RDO_TIME
, A.ID
, A.IVT_ID
, A.BND
, A.TDY_GNR_PWR
, (SELECT (MAX(DSM1.DAS_ELC1))
FROM TM_FL_DSM DSM1
WHERE DSM1.ID = A.ID
AND DSM1.IVT_ID = A.IVT_ID
AND DSM1.LOC_DATE = (SELECT MAX(DSM2.LOC_DATE)
FROM TM_FL_DSM DSM2
WHERE DSM2.ID = A.ID
AND DSM2.IVT_ID = A.IVT_ID
AND DSM2.LOC_DATE <= REPLACE(DATE_SUB(A.LOC_DATE, INTERVAL 1 DAY), '-', ''))
) TTL_GNR_PWR
FROM (SELECT "DAY" RDO_TIME
, A.ID
, A.IVT_ID
, A.LOC_DATE
, A.LOC_DATE BND
, (MAX(A.ELC1) - MIN(A.ELC1)) TDY_GNR_PWR
FROM TM_FL_MSR A
WHERE LOC_DATE BETWEEN '20201230' AND '20201231'
GROUP BY RDO_TIME
, ID
, IVT_ID
, LOC_DATE
, BND
) A
;
위와 같이 쿼리를 작성하여 수행 하면 아래와 같은 오류가 발생 합니다 고수님들의 조언 부탁드립니다.
부등호(<=) 조건 사용시 발생한 오류인 듯 한데
해당 조건이 사용된 곳이 한군데 있네요.
여기 보면 replace 함수를 이용하는데.
replace 는 문자함수인데 인자를 날짜로 주는 부분도 잘못이고요.
DATE_FORMAT 함수를 이용하면 될 듯 하긴 하지만
굳이 하루 빼서 <= 조건 줄게 아니라 그냥 이퀄을 빼고 < 을 사용하면
하루 안빼도 되고, 함수 안써도 됩니다.
- 변경전 : AND dsm2.loc_date <= REPLACE(DATE_SUB(a.loc_date, INTERVAL 1 DAY), '-', ''))
- 변경후 : AND dsm2.loc_date < a.loc_date