안녕하세요.
한달에 한번 실행되는 스케줄에 해당하는 항목들을 가져오려고 합니다.
postgresql이고 도움 부탁드립니다.
order_id = 주문번호, use_term=사용개월 , pay_success_ts=결제일, reg_ts=생성일, start_dy=이용시작일, expiration_dy=이용종료일 입니다.
SELECT order_id, use_term, pay_success_ts, reg_ts, start_dy, expiration_dy
FROM tb_strg_order01m a
WHERE a.pay_gubun = 'P'
AND a.pay_std = 'success'
AND to_date(a.expiration_dy, 'YYYYMMDD') > to_date(to_char('20231101'::date, 'YYYYMMDD'), 'YYYYMMDD')
AND use_term > '1'
조회 결과는 아래와 같습니다.
| order_id | use_term | pay_success_ts | reg_ts | start_dy | expiration_dy |
| 224 | 6 | 2023-05-23 13:16:48.300 | 2023-05-23 13:16:48.304 | 20230525 | 20231124 |
| 235 | 6 | 2023-06-01 15:31:53.270 | 2023-06-01 15:31:53.273 | 20230601 | 20231201 |
| 450 | 3 | 2023-09-03 16:10:11.692 | 2023-09-03 16:10:11.696 | 20230909 | 20231208 |
| 72 | 12 | 2023-02-10 21:22:54.750 | 2023-02-10 21:22:54.755 | 20230211 | 20240210 |
| 416 | 3 | 2023-08-23 12:21:10.407 | 2023-08-23 12:21:10.411 | 20230825 | 20231124 |
현재월이 11월이라고 가정 했을때
이용시작일과 이용종료일에 포함된 데이터만 가져오면 되는데
order_id 224와 416은 이미 10월달에 결제가 되었을테니 빼고 가져와야 됩니다.
그래서 제가 원하는 데이터는 아래와 같습니다.
| order_id | use_term | pay_success_ts | reg_ts | start_dy | expiration_dy |
| 235 | 6 | 2023-06-01 15:31:53.270 | 2023-06-01 15:31:53.273 | 20230601 | 20231201 |
| 450 | 3 | 2023-09-03 16:10:11.692 | 2023-09-03 16:10:11.696 | 20230909 | 20231208 |
| 72 | 12 | 2023-02-10 21:22:54.750 | 2023-02-10 21:22:54.755 | 20230211 | 20240210 |
도움 부탁드립니다.
"order_id 224와 416은 이미 10월달에 결제가 되었을테니" 이 정보를 특정 지을 수 있는 컬럼이 혹시 있나요?
아니면 무조건 1달 전에 결제가 되는건가요?
조회 대상 판별 기준을 정확하게 알려주셔야 합니다.
"224의 경우 5월 부터 10월까지 6개월간의 정산은 이미 된 상태고 끝났으니" 라고 하셨는데?
어떤 항목의 어떤 값을 기준으로 판별하신 것인지 값을 구체적으로 적어주세요.
예를 들면 (5월 부터 10월까지)가 6개월인 듯 하지만
일자까지 고려하면 (5월25일 ~ 11월24일)이 6개월입니다.
특정 지을 수 있는 컬럼은 없습니다. use_term 6개월 짜리를 한달 한달 나눌려고 한다고 보시면 됩니다. ㅠㅠ
예를들어서 224의 경우 5월 부터 10월까지 6개월간의 정산은 이미 된 상태고 끝났으니 11월에는 나오면 안되는 겁니다.
질문해 주신 내용을 정확하게 이해하지 못해 질문을 또 드리게 되네요....
답변해주신 224와 같이 235의 경우에도 이미 6월부터 12월까지 결제가 완료 되었다고 봐야하는거 아닐까요?
1. 조회조건만 바꾸면 되는 것 아닌가요?
- 조회조건 : '20231101' -> '20231201'
2. 그리고 불필요한 함수 사용도 제거하면 좋을 듯 합니다.
- 조건절에서 사용된 함수들 제거 : to_char, to_date, ::date 등 전부 불필요
- AND a.expiration_dy >= '20231201'