2017-11-10 9 views
-1

2 개의 별도의 쿼리를 하나로 병합하려고합니다. Jaspersoft 리포팅 스튜디오에서 사용하고 있습니다. 첫 번째 쿼리의 출력은 지정된 날짜 범위 사이의 테이블 항목에 대한 세부 정보입니다. 두 번째 쿼리의 출력에는 첫 번째 쿼리의 출력 양 중 일부가 자체 매개 변수와 함께 포함됩니다. 그들은 별개로 잘 작동합니다.별도의 2 개의 SQL 쿼리 합치기

그래서 하나의 단일 쿼리에 이들을 결합 할 수 있는지 확실하지 않습니다.

질의 1 :

SELECT 
`alarminfo`.`condition_id`, 
`alarminfo`.`landscape_h`, 
`landscape`.`domain_name`, 
`model`.`model_name`, 
`alarminfo`.`set_time`, 
`alarminfo`.`clear_time` , 
`alarminfo`.`alarm_key`, 
`alarmtitle`.`title`, 
`alarminfo`.`ack_time`, 
`alarminfo`.`set_troubleticket_id`, 
`alarminfo`.`first_assigned_time`, 
`alarmcondition`.`condition_name`, 
TIMESTAMPDIFF(SECOND,alarminfo.set_time ,alarminfo.clear_time) seconds_to_clear, 
    TIMESTAMPDIFF(SECOND,alarminfo.set_time ,'2017-09-01 00:00:00.0') alerttime 
FROM alarminfo 
INNER JOIN landscape ON (alarminfo.landscape_h=landscape.landscape_h) 
INNER JOIN alarmtitle ON (alarminfo.alarm_title_id=alarmtitle.alarm_title_id) 
INNER JOIN model ON (alarminfo.model_key=model.model_key) 
INNER JOIN alarmcondition on (alarminfo.condition_id=alarmcondition.condition_id) 
    where 
((alarminfo.set_time>='2017-09-01 00:00:00.0' AND alarminfo.set_time<'2017-09-30 23:59:59.0') AND 
    (alarminfo.clear_time>='2017-09-01 00:00:00.0' AND alarminfo.clear_time<'2017-09-30 23:59:59.0') AND 
    (alarmcondition.condition_name IN ('Critical', 'Major', 'Minor')) AND 
    (TIMESTAMPDIFF(SECOND,alarminfo.set_time ,alarminfo.ack_time)>60*15) 


) 
    order by `alarminfo`.`set_troubleticket_id`DESC , `alarminfo`.`ack_time` , `alarminfo`.`set_time` , `alarminfo`.`landscape_h`, `alarminfo`.`condition_id` 

질의 2 : 이것은 불행하게도 작동하지

SELECT 
`alarminfo`.`condition_id`, 
`alarminfo`.`landscape_h`, 
`landscape`.`domain_name`, 
`model`.`model_name`, 
`alarminfo`.`set_time`, 
`alarminfo`.`clear_time` , 
`alarminfo`.`alarm_key`, 
`alarmtitle`.`title`, 
`alarminfo`.`ack_time`, 
`alarminfo`.`set_troubleticket_id`, 
`alarminfo`.`first_assigned_time`, 
`alarmcondition`.`condition_name`, 
TIMESTAMPDIFF(SECOND,alarminfo.set_time ,alarminfo.clear_time) seconds_to_clear, 
    TIMESTAMPDIFF(SECOND,alarminfo.set_time ,'2017-09-01 00:00:00.0') alerttime 
FROM alarminfo 
INNER JOIN landscape ON (alarminfo.landscape_h=landscape.landscape_h) 
INNER JOIN alarmtitle ON (alarminfo.alarm_title_id=alarmtitle.alarm_title_id) 
INNER JOIN model ON (alarminfo.model_key=model.model_key) 
INNER JOIN alarmcondition on (alarminfo.condition_id=alarmcondition.condition_id) 
    where 
((alarminfo.set_time>='2017-09-01 00:00:00.0' AND alarminfo.set_time<'2017-09-30 23:59:59.0') AND 
    (alarminfo.clear_time>='2017-09-01 00:00:00.0' AND alarminfo.clear_time<'2017-09-30 23:59:59.0') AND 
    (alarmcondition.condition_name IN ('Critical', 'Major', 'Minor')) AND 
    (TIMESTAMPDIFF(SECOND,alarminfo.set_time ,alarminfo.ack_time)>60*15) 


) 

count(*) 'Total alarms', 
    sum(case when ack_time is not null then 1 else 0 end) as 'total acknowledged', 
    sum(case when (TIMESTAMPDIFF(SECOND,alarminfo.set_time ,alarminfo.ack_time)<60*15) then 1 else 0 end) as 'Total acknowledged within 15min', 
    sum(case when (TIMESTAMPDIFF(SECOND,alarminfo.set_time ,alarminfo.ack_time)>60*15) then 1 else 0 end) as 'Total acknowledged after 15min' 
FROM alarminfo 
where 
alarminfo.set_time>='2017-09-01 00:00:00.0' AND alarminfo.set_time<'2017-09-30 23:59:59.0' 
) 

    order by `alarminfo`.`set_troubleticket_id`DESC , `alarminfo`.`ack_time` , `alarminfo`.`set_time` , `alarminfo`.`landscape_h`, `alarminfo`.`condition_id` 

을 :

select 
count(*) 'Total alarms', 
    sum(case when ack_time is not null then 1 else 0 end) as 'total acknowledged', 
    sum(case when (TIMESTAMPDIFF(SECOND,alarminfo.set_time ,alarminfo.ack_time)<60*15) then 1 else 0 end) as 'Total acknowledged within 15min', 
    sum(case when (TIMESTAMPDIFF(SECOND,alarminfo.set_time ,alarminfo.ack_time)>60*15) then 1 else 0 end) as 'Total acknowledged after 15min' 
FROM alarminfo 
where 
alarminfo.set_time>='2017-09-01 00:00:00.0' AND alarminfo.set_time<'2017-09-30 23:59:59.0' 

이것은 내가 함께 병합하려고하는 방법이다. 누군가 병합하는 방법에 대한 아이디어가 있습니까?

+1

이 사건에 대한 샘플 입력 및 예상 출력을 보여주십시오 R로 condition_id
). –

+0

보고 용어로 실제로 해결하려는 것은 무엇입니까? – Narcis

+0

첫 번째 출력은 더 큰 쿼리입니다. 초는 작은 쿼리입니다. 이것은 mysql 쿼리 브라우저에서만 출력됩니다. 이 쿼리는 jaspersoft에서 사용되며 여기서 특정 데이터 만 사용합니다. 두 번째 알람은 실제로 특정 알람의 총계입니다. 난 그냥이 두 쿼리가 함께 갈 수 있도록하는 방법을 궁금 [여기 이미지 설명을 입력합니다] [1] [여기 이미지 설명을 입력합니다] [2] [1] : HTTPS : //i.stack. imgur.com/gjIQM.png [2] : https://i.stack.imgur.com/oG7QJ.png – CaPsLoCkEr

답변

0

첫 번째 쿼리의 출력을 두 번째 쿼리의 입력으로 사용하십시오. 두 번째 쿼리의 Where 절이 이미 첫 번째 쿼리에서 다루어 졌으므로 생략 할 수 있습니다.

(*)가 '전체 알람'
합으로서 '총 인정'(ack_time 후 1 다른 0 단부 null가 아닌 경우),
합 (케이스
카운트를 선택 (TIMESTAMPDIFF (SECOND, R.set_time, R.ack_time) < 60 * 15) then 1 else 0 end) '총 승인 시간 15 분',
합계 (TIMESTAMPDIFF (SECOND, R.set_time, R.ack_time)> 60 * 15) then 1 else 0 end) '15 분 후 확인 응답'
FROM (SELECT
alarminfo. condition_id,
alarminfo. landscape_h,
landscape. domain_name,
model. model_name,
alarminfo. set_time,
alarminfo. clear_time,
alarminfo. alarm_key,
alarmtitle. title,
alarminfo. ack_time,
alarminfo. set_troubleticket_id,
alarminfo. first_assigned_time,
alarmcondition. condition_name,
TIMESTAMPDIFF (SECOND, alarminfo.set_time, alarminfo.clear_time) seconds_to_clear,
TIMESTAMPDIFF (SECOND, alarminfo.set_time '2017년 9월 1일 00 : 00 : 00.0')
INNER JOIN을 alarminfo FROM alerttime
ON (alarminfo.landscape_h = landscape.landscape_h)
INNER가 alarmtitle ON 가입 풍경 (alarminfo.alarm_title_id = alarmtitle.alarm_title_id)
INNER은 (alarminfo.model_key = 모델에 대한 모델을 가입하세요.model_key)
INNER alarmcondition에 가입 (alarminfo.condition_id = alarmcondition.condition_id)
여기서
((alarminfo.set_time> = AND alarminfo.set_time < '2017-09'2017년 9월 1일 00 : 00.0 : 00 -30 23 : 59 : 59.0 ') AND
(alarminfo.clear_time> ='2017-09-01 00 : 00 : 00.0 'AND alarminfo.clear_time <'2017-09-30 23 : 59 : 59.0 ') AND
0123에 의해 은 (는 alarmcondition.condition_name IN ('위험', '주요'), '부') AND
() TIMESTAMPDIFF (SECOND, alarminfo.set_time, alarminfo.ack_time> 60 * 15)
)
주문. set_troubleticket_id DESC, alarminfo. ack_time, alarminfo. set_time, alarminfo. landscape_h, alarminfo. 각 쿼리의 샘플 출력 및 병합 된 쿼리에 무엇을 출력 당신이 원하는 :

+0

이제 "파생 된 모든 테이블에는 고유 한 별칭이 있어야합니다"라는 오류 메시지가 표시됩니다. – CaPsLoCkEr