인프런 커뮤니티 질문&답변

류재안님의 프로필 이미지
류재안

작성한 질문수

도대체 왜? 도대체 어떻게! DB 설계와 데이터 다루기

머릿속으로 그려보는 결제 너머 세상 (가상 데이터 생성)

[가상데이터 생성]

해결된 질문

작성

·

124

1

안녕하세요.

워크벤치로 하다보니 동일한 쿼리문에 에러가 나는 경우가 더러 있네요. 구글링으로 보완해가면서 테스트 중입니다.

 

카페 사용관련 가상데이터 설명 (21:06분) 내용 중에 '1일2회 이상 등록된 전화번호 및 결제일자를 삭제 하는 쿼리문 실행시,

"" 요런 메시지가 나와서, 구글링을 해보니, 삭제시 자기 테이블을 조회할 수 없기 때문이라고 나와서 수정을 했는데요.

요렇게 하면 제대로 수행이 되는 것 같습니다.

 

근데 궁금한 건... 강의내용의 쿼리문은

고객의 해당일자 전체를 삭제하는 것 같은데요.

하루 최초 또는 마지막 건수를 남기고 나머지를 삭제하는 쿼리문을 좀 알 수 있을까요?

 

 

답변 1

0

안녕하세요 류재안 님.

우선 제가 사용하는 MariaDB서버 버전을 알려드리면 10.6 및 11.x 입니다. 혹시 버전 문제 소지가 있을 수 있어 말씀드립니다.

요청하신 쿼리는 다음과 같습니다.

DELETE FROM sc_payment

WHERE (usr_phnumber, DATE_FORMAT(pay_dt,'%Y-%m-%d %H'))

IN (

SELECT usr_phnumber, pay_dt FROM (

SELECT usr_phnumber,DATE_FORMAT(pay_dt,'%Y-%m-%d %H') AS pay_dt

,ROW_NUMBER() OVER

(PARTITION BY usr_phnumber

ORDER BY usr_phnumber,DATE_FORMAT(pay_dt,'%Y-%m-%d %H') DESC) AS row_number_

FROM sc_payment

) a

WHERE a.row_number_ != 1

);

위의 쿼리는 년-월-일-시까지만 보았을 때 하루동안 중복된 건들을 처리합니다. 초 단위까지 하시려면 DATE_FORMAT의 시간형식 포맷을 초 단위까지 적절히 기재해 주시면 됩니다.

수행 내용은 동일한 전화번호에 대해 하루 동안 마지막 건수만 남기고 나머지를 삭제하는 쿼리입니다.

 

유사한 내용이 채널에 있어 URL을 남깁니다.

https://www.youtube.com/watch?v=tqClIDsoa3U&t=50s

 

류재안님의 프로필 이미지
류재안
질문자

네, 감사합니다.

류재안님의 프로필 이미지
류재안

작성한 질문수

질문하기