by 데이터af [Oracle 기초] [2020.04.15 15:18:00]
안녕하세요
이번에 출석체크 기능을 구현하게 되었는데요 . 연속 4일 출석체크 여부를 어떻게 조회할까 고민되서요
테이블 명 : attendJoin
memberNo point insDt
1323 7 20200415
1323 7 20200416
1323 7 20200417
1323 7 20200418
=> 4일연속 인경우 5번째는 700포인트를 줍니다.
1323 700 20200419
이 경우 어떻게 조회를 해야할지 고민이 됩니다.
1. 해당 당일날짜 에서 -4에서 오늘까지의 데이터를 조회하면 될거 같은데 중간에 700 포인트를 주고 나서 20200420일부터 다시 5일체크를 해야하는데 이건 쿼리로 불가능할까요 ...
--INSERT INTO attendJoin(memberNo, point, insDt) SELECT :v_memberNo AS memberNo , DECODE(COUNT(*), 4, 700, 7) AS point , TO_CHAR(sysdate, 'yyyymmdd') AS insDt FROM attendJoin WHERE insDt >= TO_CHAR(sysdate - 4, 'yyyymmdd') AND insDt <= TO_CHAR(sysdate - 1, 'yyyymmdd') AND point = 7 AND memberNo = :v_memberNo HAVING NOT EXISTS (SELECT 1 -- 이미 로그인 한 자료는 제외 -- FROM attendJoin WHERE memberNo = :v_memberNo AND insDt = TO_CHAR(sysdate, 'yyyymmdd') ) ;