SELECT DISTINCT to_char(created_ymd, 'YYYY-MM-DD') AS ymd, space_id FROM history WHERE created_ymd >= '시작날짜'::date - INTERVAL '3 months' AND created_ymd <= '종료날짜'::date
history 테이블에서 pk는 id입니다.
id | integer | PK |
created_ymd | timestamp | not null |
price | integer | not null |
space_id | integer | not null |
...
...
시작날짜부터 종료날짜까지 기준날짜별로 3개월 전부터 해당 기준날짜까지의 space_id와 기준날짜를 구해야합니다.
space_id는 중복값이 있어서 중복값을 제거하려고 DISTINCT를 사용했고 날짜 형식 변경이 필요해서 to_char()를 활용했습니다.
ex)
id | created_ymd | price | space_id |
1001 | 2022-09-26 05:11:39.632096+00 | 10000 | 12567 |
2019 | 2022-11-21 05:11:39.632096+00 | 20000 | 12567 |
3003 | 2022-12-13 05:12:32.767721+00 | 30000 | 12567 |
시작날짜가 만약 2022-12-15라면
3개월 전부터 2022-12-15까지에 포함되는 애들을 찾아야하고
위 테이블 예시에서 3개가 전부 해당되고 12567로 space_id가 같으므로 결과가
12567 | 2022-12-15 |
위와 같이 산출되면 좋겠습니다.
작성한 쿼리로 돌리면 결과가 나오긴 하지만 조회 속도가 많이 걸려서 성능을 개선하고 싶어 도움 요청드립니다ㅠㅠㅠㅠ
6일치 데이터 양은 평균적으로 천칠백만건 정도 됩니다.
+ 추가
인덱스에 "idx_created_ymd" btree (created_ymd), "idx_space_id" btree (space_id)가 있습니다.