SQL 그룹 기준 - 월별 레코드 수, 삽입 시 오류 - 유효한 달이 아님
다음 예제 데이터가 있습니다.
Country | Members | Joined
USA | 250 | 1/1/2012
USA | 100 | 1/8/2012
Russia | 75 | 1/20/2012
USA | 150 | 2/10/2012
이 데이터를 조회할 때 해당 한 달 동안의 모든 기록을 집계하고 싶습니다.쿼리 결과는 다음과 같습니다.
Country | Members | Joined
USA | 350 | 1/2012
Russia | 75 | 1/2012
USA | 150 | 2/2012
매우 간단한 선택으로서:
select country, count(*) as members , to_char(trunc(joined), 'MM-YYYY')
from table
group by country, to_char(trunc(joined), 'MM-YYYY')
해당 쿼리는 내가 원하는 형식의 데이터를 제공하지만, 내 문제는 새 피벗 테이블에 데이터를 삽입하려고 할 때 select 문의 to_char()가 DATTIME 열에 배치되어 있기 때문에 오류가 발생한다는 것입니다(오류: ORA-01843 - 유효한 달이 아님).
선택 항목에서 to_char()를 to_date()로 변경해도 여전히 작동하지 않습니다(같은 오류, ORA-01843 - 유효한 달이 아님).
select country, count(*) as members, to_date(trunc(joined), 'MM-YYYY')
from table
group by country, to_date(trunc(joined), 'MM-YYYY')
"JOINED" 열이 DATTIME 유형인 새 테이블에 결과를 삽입할 수 있도록 이 쿼리를 수정하는 방법에 대한 제안이 있습니까?
팁/설명/설명에 대해 미리 감사드립니다!
당신은 다음과 같은 것을 할 수 있습니다.to_date('01/'||trunc(joined), 'DD/MM/YYYY')
먼저 유효한 날짜가 될 겁니다월의 첫 번째 날을 사용할지 마지막 날을 사용할지 결정하면 됩니다(마지막 날이 더 복잡함).
또 다른 옵션은 EXTRACT 기능을 사용하는 것입니다.
select country, count(*) as members, EXTRACT(MONTH FROM joined) as mn, EXTRACT(YEAR FROM JOINED) as yr,MIN(JOINED) as dt
from table
group by country, EXTRACT(MONTH FROM joined), EXTRACT(YEAR FROM JOINED)
그런 다음 dt 열을 선택하고 삽입하면 됩니다.
당신은 그것을 사용해야 합니다.trunc
해당 월의 첫 번째 날짜를 잘라내는 함수입니다.이렇게 하면 날짜를 문자열로 변환할 필요가 없고 문자열을 다시 날짜로 변환할 필요가 없습니다.
select country,
count(*) as members ,
trunc(joined, 'MM')
from table
group by country,
trunc(joined, 'MM')
언급URL : https://stackoverflow.com/questions/11438806/sql-group-by-counting-records-per-month-year-error-on-insert-not-a-valid-mo
'programing' 카테고리의 다른 글
오류: xxx 테이블에 대한 테이블스페이스가 있습니다.가져오기 전에 테이블스페이스를 삭제하십시오. (0) | 2023.08.05 |
---|---|
선형 레이아웃에서 여백을 프로그래밍 방식으로 설정 (0) | 2023.08.05 |
Xcode 4: 콘솔을 어떻게 보십니까? (0) | 2023.07.31 |
도커 파일의 조건부 복사/추가? (0) | 2023.07.31 |
rxjs에서 관찰 가능한 항목을 가져오는 가장 좋은 방법 (0) | 2023.07.31 |