안녕하세요, 매번 도움만 얻어가는 염치없는 1인 입니다.
다름이 아니라 DATE 로 GROUP BY 절을 사용해야 하는상황인대
일자별로 그룹핑이 된 후 해당 날자의 시간을 그룹핑을 해야하는상황입니다. 도와주세요.
SELECT COUNT(REG_SEQ) TM_CNT, REG_DT FROM ( SELECT REG_SEQ, TO_CHAR(REG_DT, 'YYYY-MM-DD') AS REG_DT FROM TABLE GROUP BY REG_SEQ, TO_CHAR(REG_DT, 'YYYY-MM-DD') ) GROUP BY REG_DT
위의 SQL 결과에 추가로 HH24 가 필요한 경우인데 어떻게 해답이 없을까요?
SELECT COUNT(REG_SEQ) TM_CNT, REG_DT_TM FROM ( SELECT REG_SEQ, TO_CHAR(REG_DT, 'YYYY-MM-DD') AS REG_DT, TO_CHAR(REG_DT, 'HH24') AS REG_DT_TM, FROM VB_STAT_USERAGENT WHERE REG_DT >= TO_DATE('2015-07-20' || '00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND REG_DT <= TO_DATE('2015-07-20' || '23:59:59', 'YYYY-MM-DD HH24:MI:SS') GROUP BY REG_SEQ, TO_CHAR(REG_DT, 'YYYY-MM-DD'),TO_CHAR(REG_DT, 'HH24') ) GROUP BY REG_DT_TM
이런식으로 추가시 시간이 같이 그룹핑이 되어서 제가 원하는 데이터 결과물에 시간대별의 로우가 추가로 생기는 문제때문에 해결을 못하고 있습니다.ㅜㅜ
죄송합니다.
원하는 데이터 결과 로우는
TM_CNT | REG_DT_TM |
2 | 08 |
4 | 09 |
2 | 10 |
3 | 11 |
1 | 14 |
7 | 17 |
이런식의 결과가 필요합니다.
해당 결과를 나타내기위한 조건은
1. REG_SEQ 가 같은 날에 중복이 되지 않아야 합니다
2. REG_DT_TM 해당 날자의 시간이 필요합니다.
결과물을 올리셨는데요. 또, 이해가 안가는데요. ㅎㅎ
기존 질문과 전혀 매칭되지 않는 새로운 결과물이네요.
원래 올리신 질문엔 reg_seq 없이 Count 했는데.
올리신 결과물은 reg_seq 가 있고 Count 는 없네요?
그냥 DISTINCT 하면 되는 것 아닌지요?
SELECT DISTINCT reg_seq , TO_CHAR(reg_dt, 'yyyy-mm-dd') reg_dt , TO_CHAR(reg_dt, 'hh24') reg_dt_tm FROM t WHERE 조건 ;
원본자료가 어떻길래 해당 결과가 나오나요?
원본 예시도 보여주세요.
SELECT * FROM ( SELECT DISTINCT REG_SEQ, REG_DT_TM FROM ( SELECT REG_SEQ, TO_CHAR(REG_DT, 'YYYY-MM-DD') AS REG_DT, TO_CHAR(REG_DT, 'HH24') AS REG_DT_TM FROM VB_STAT_USERAGENT WHERE REG_DT >= TO_DATE('2015-07-20' || '00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND REG_DT <= TO_DATE('2015-07-20' || '23:59:59', 'YYYY-MM-DD HH24:MI:SS') GROUP BY REG_SEQ, TO_CHAR(REG_DT, 'YYYY-MM-DD'), TO_CHAR(REG_DT, 'HH24') ORDER BY REG_SEQ ) GROUP BY REG_DT_TM, REG_SEQ )
이런식으로 처리시 결과가
REG_SEQ | REG_DT_TM |
A | 12 |
B | 10 |
B | 12 |
C | 13 |
이런식의 결과가 나오게 되는대요
REG_DT_TM 이 다르더라도 REG_SEQ 는 1개의 로우만 필요한상황입니다.
그걸 최종적으로 COUNT 로 묶게 되면 제가 원하는 결과가 될거 같습니다.
SELECT COUNT(REG_SEQ) CNT, TO_CHAR(REG_DT, 'YYYY-MM-DD') AS REG_DT, TO_CHAR(REG_DT, 'HH24') AS REG_DT_TM, FROM VB_STAT_USERAGENT WHERE REG_DT >= TO_DATE('2015-07-20' || '00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND REG_DT <= TO_DATE('2015-07-20' || '23:59:59', 'YYYY-MM-DD HH24:MI:SS') GROUP BY TO_CHAR(REG_DT, 'YYYY-MM-DD'),TO_CHAR(REG_DT, 'HH24')
그냥 시간대별 카운트가 필요하신 거 아닌가요?
REG_DT_TM이 다르더라도 REG_SEQ가 1개의 로우만 필요하다는 말씀이??
한글로 설명하시지 마시고 그냥 표로 기본 데이터 -> 결과 데이터 이런 식으로 보여주시는 게
나을 듯합니다만
REG_SEQ가 같은날자 여러 시간대에 포함되어 있다고 하더라도
같은날자에는 COUNT를 1개로 보여주는 결과가 필요합니다.
-> 시간 별 카운트라는 말 아닌가요?
reg_dt, reg_seq 가 다음과 같을 때 결과가 어떻게 나와야 하나요?
7월20일 08시 20분, 1
7월20일 08시 25분, 2
7월20일 09시 30분, 3
7월20일 10시 15분, 4
7월20일 11시 10분, 5
7월20일 11시 55분, 6
------------------------
위에 글 다시 쭉 읽어보니 reg_seq가 하루에도 여러개가 중복되기도 하나보네요?
보다보니 퇴근시간이네요.
질문하시는 분이 약간 번거로우시더라도
원본데이터표, 결과데이터표, 설명 추가 요렇게 해주시면
답변하는 분들이 금방 이해가 될 거예요. 하루 수고하셨음다~~
reg_seq | reg_dt |
A1 | 2015-06-01 03:45:24 |
A1 | 2015-06-01 04:45:24 |
B1 | 2015-06-01 05:45:24 |
B1 | 2015-06-01 05:45:24 |
C1 | 2015-06-01 13:45:24 |
C1 | 2015-06-01 05:45:24 |
D1 | 2015-06-01 13:45:24 |
D1 | 2015-06-01 14:45:24 |
D1 | 2015-06-01 14:45:24 |
위처럼 데이터가 저장되고 있습니다.
데이터는 계속 쌓이고 있으며 해당 데이터에 대한 결과를 보여주고 싶은거는
CNT | TM |
1 | 03 |
2 | 05 |
1 | 13 |
입니다. 이렇게 되면 조금 이해하시기 쉬우실까요.? 죄송합니다 혼란을 많이 드린거 같아서