시간 포맷을 변경하여 Group by 적용하기 0 2 2,516

by 윤영수 Group redash to_date [2023.04.13 19:53:15]


안녕하세요 SQL 초보인 유저입니다.

Redash를 이용하여 작업을 진행 중인데, 해결되지 않은 오류가 있어

문의 드립니다.

다음과 같은 테이블이 있습니다.(예시 테이블입니다)

id roomid starttime endtime
AAA R001 12:00:01 12:07:01
BBB R001 12:00:01 12:07:01
CCC R001 12:00:01 12:07:01
DDD R002 14:00:01 14:12:01
EEE R002 14:00:01 14:12:02
FFF R002 14:00:01 14:12:01

 

제가 수행한 내용은

Select roomid,starttime,endtime from T group by 1,2,3

을 수행하여 다음과 같은 결과 값이 나왔습니다.

roomid starttime endtime
R001 12:00:01 12:07:01
R002 14:00:01 14:12:01
R002 14:00:01 14:12:02

 

다만, 제가 원하는 결과값은 초단위의 값은 필요가 없어 시간을 분단위로 끊기 위해

Select roomid,starttime, to_date(endtime, 'YYYY-MM-DD HH24:MI') from T group by 1,2,3

위와 같이 코드를 작성해봤으나, 

Error running query: column "end" must appear in the GROUP BY clause or be used in an aggregate function

위와 같이 오류가 나옵니다. 

 

아무리 답을 찾으려고 해도 답이 나오지 않아 이렇게 질문 드립니다.

제가 원하는 형태로의 결과값이 나올 수 있을까요?

 

<원하는 결과값>

roomid starttime endtime
R001 12:00 12:07
R002 14:00 14:12
by pajama [2023.04.14 00:21:52]

postgresql 인지요? starttime, endtime이 timestamp라면 to_char로 사용하시면 되겠네요.

문자열이라면 substr로.

select roomid,to_char(starttime, 'HH24:MI'), to_char(endtime, 'HH24:MI') from T group by 1,2,3

 


by 마농 [2023.04.14 08:18:27]

group by 1,2,3 이 구문이 동작하는 모양이네요? 어떤 DBMS 인가요?
컬럼을 원하는 모양대로 가공하여 그룹바이 하면 됩니다.
to_date 는 잘못된 사용법인 듯 하네요.
pajama 님 답변대로. 해당 컬럼 타입에 따라 to_char 나 substr 을 사용해야 할 듯 합니다.
to_char 나 substr 등의 포멧 변환 함수는 사용 DBMS 의 종류에 따라 다를 수 있습니다.
그리고, 집계함수를 사용하지 않는다면?
굳이 그룹바이를 할 필요 없이 DISTINCT 를 사용하시면 됩니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입