안녕하세요,
MSSQL 쿼리문을 실무에서 사용하다 동일한 쿼리문을 Postgresql 쿼리문으로 바꿔 사용하려 합니다.
문법이 조금 다른 관계로 검색해보면서 쿼리문을 수정해보았는데, 잘 되지 않아서 도움을 요청드립니다.
감사합니다.
(MSSQL 쿼리문은 다음과 같습니다.)
declare @time_start datetime declare @time_end datetime declare @temptable table(StartDate varchar(10),EndDate varchar(10), Connect_Count nvarchar(512)) declare @temptable2 table(StartDate varchar(10),EndDate varchar(10), Use_VM_Count nvarchar(512)) declare @i int declare @day_start datetime declare @cc int set @time_start='2020-01-01' --조회 시작날짜 set @time_end='2020-12-31' -- 조회 종료날짜 ------- 1. 일별 접속 횟수 Query---------------------------------------------- set @i=DATEPART(dd,@time_start) set @day_start=@time_start while @i<=DATEdiff(d,@time_start,@time_end+1) begin -- 데이터 조회 SELECT distinct @cc=count(ed.StrValue) FROM dbo.event_historical AS ev, dbo.event_data_historical AS ed WHERE ev.EventID = ed.EventID And ed.Name='UserDisplayName' and ev.EventType='BROKER_USERLOGGEDIN' and ev.Time between @day_start and @day_start+1 -- 조회된 데이터 임시테이블에 Insert insert into @temptable values(convert(varchar(10),@day_start,120) ,convert(varchar(10),@day_start+1,120) ,@cc) set @day_start=dateadd(d,1,@day_start) set @i=@i+1 end set @day_start='' set @i=0 set @cc=0 -- Insert된 임시 테이블 조회 select * from @temptable ------- 2. 일별 사용된 VM 수 Query---------------------------------------------- set @i=DATEPART(dd,@time_start) set @day_start=@time_start while @i<=DATEdiff(d,@time_start,@time_end+1) begin -- 데이터 조회 select @cc = COUNT(*) from ( SELECT distinct ed.StrValue, ev.Node FROM dbo.event_historical AS ev LEFT OUTER JOIN dbo.event_data_historical AS ed ON ev.EventID = ed.EventID WHERE (ev.EventType='AGENT_PENDING' or ev.EventType='AGENT_DISCONNECTED' or ev.EventType='AGENT_ENDED') and ed.Name='UserDisplayName' and ev.Time between @day_start and @day_start+1 )a -- 조회된 데이터 임시테이블에 Insert insert into @temptable2 values(convert(varchar(10),@day_start,120) ,convert(varchar(10),@day_start+1,120) ,@cc) set @day_start=dateadd(d,1,@day_start) set @i=@i+1 end set @day_start='' set @i=0 set @cc=0 -- Insert된 임시 테이블 조회 select * from @temptable2
일별 루프 돌려가면서 집계결과를 임시테이블에 입력하는데?
이렇게까지 복잡하게 할 필요가 있는지 모르겠네요.
그룹바이 집계쿼리로 쉽게 해결될 문제일 듯 합니다.
SELECT TO_CHAR(ev.time, 'yyyy-mm-dd') StartDate , COUNT(ed.StrValue) Connect_Count FROM event_historical ev INNER JOIN event_data_historical ed ON ev.eventid = ed.eventid WHERE ed.name = 'UserDisplayName' AND ev.eventtype = 'BROKER_USERLOGGEDIN' AND ev.time >= DATE '2020-01-01' AND ev.time < DATE '2020-12-31' + 1 GROUP BY TO_CHAR(ev.time, 'yyyy-mm-dd') ORDER BY StartDate ;
SELECT StartDate , COUNT(*) Use_VM_Count FROM (SELECT DISTINCT TO_CHAR(ev.time, 'yyyy-mm-dd') StartDate , ed.StrValue , ev.Node FROM event_historical ev INNER JOIN event_data_historical ed ON ev.eventid = ed.eventid WHERE ed.name = 'UserDisplayName' AND ev.eventtype IN ('AGENT_PENDING', 'AGENT_DISCONNECTED', 'AGENT_ENDED') AND ev.time >= DATE '2020-01-01' AND ev.time < DATE '2020-12-31' + 1 ) a GROUP BY StartDate ORDER BY StartDate ;