2017-11-10 21 views
-1

2つの別々のクエリを1つにマージしようとしています。私はjaspersoftのレポートスタジオにそれらを使用しています。最初のクエリの出力は、指定された日付範囲内のテーブル内のエントリに関する詳細です。 2番目のクエリの出力には、最初のクエリの出力量の一部と、独自のパラメータが含まれています。彼らは別々に別々に働いています。別々の2つのSQLクエリを結合する

このように1つのクエリにこれらを組み合わせることが可能かどうかはわかりません。

クエリ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 
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' 

これは私がそれらを一緒にマージしようとしている方法です:

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` 

これは、残念ながら機能していません。誰かがそれらをマージする方法についてアイデアを持っていますか?

+1

は、あなたのケースのためのサンプル入力と期待される出力を表示してくださいRとしてcondition_id
)。 –

+0

レポート用語で実際に何を解決しようとしていますか? – Narcis

+0

最初の出力は大きいクエリです 秒は小さなクエリです。 これはmysqlクエリブラウザから出力されたものです。クエリは、特定のデータのみを使用するjaspersoftで使用されます。 秒は実際には特定のアラームの合計です。私は、これら2クエリのは、一緒に行くようにする方法を思っていた [ここに画像の説明を入力] [1] [ここに画像の説明を入力します] [2] [1]します。https://i.stack。 imgur.com/gjIQM.png [2]:https://i.stack.imgur.com/oG7QJ.png – CaPsLoCkEr

答えて

0

2番目のクエリの入力として最初のクエリの出力を使用します。したがって、2番目のクエリのwhere句はすでに最初のクエリでカバーされていますので、省略できます。

は、(*) '総アラーム'、
総和としての総認め '(ack_timeが、その後1つのそれ以外0最後がnullでない場合)、
合計(ケース
数を選択します(TIMESTAMPDIFF (SECOND、R.set_time、R.ack_time)< 60 * 15)then 1 else 0 end) '15分以内に確認された合計'として、
sum((TIMESTAMPDIFF(SECOND、R.set_time、R.ack_time)> 60×15)、次に1 else 0 end)として '15分後に確認された合計'
FROM(SELECT
alarminfocondition_id,
alarminfolandscape_h,
landscapedomain_name,
modelmodel_name,
alarminfoset_time,
alarminfoclear_time,
alarminfoalarm_key,
alarmtitletitle,
alarminfoack_time,
alarminfoset_troubleticket_id,
alarminfofirst_assigned_time,
alarmcondition。​​、
TIMESTAMPDIFF(SECOND、alarminfo.set_time、alarminfo.clear_time)seconds_to_clear、
TIMESTAMPDIFF(SECOND、alarminfo.set_time、 '2017年9月1日00:00:00.0')
内部結合alarminfo FROM alerttime
風景のON(alarminfo.landscape_h = landscape.landscape_h)
INNER JOINアラームの表示ON(alarminfo.alarm_title_id = alarmtitle.alarm_title_id)
INNER JOINモデルON(alarminfo.model_key = model。':00:00.0 2017年9月1日00' AND alarminfo.set_time <「2017から09 model_key)
インナー
((alarminfo.set_time> =
(alarminfo.condition_id = alarmcondition.condition_id)にalarmconditionをJOIN -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()、 'クリティカル' '大'、 'マイナー')と
(TIMESTAMPDIFF(SECOND、alarminfo.set_time、alarminfo.ack_time)> * 15 60)

ため0123によります。 set_troubleticket_id DESC、alarminfoack_time,alarminfoset_time,alarminfolandscape_h,alarminfo。各クエリのサンプル出力、およびマージされたクエリのどの出力したい:

+0

これで、「すべての派生テーブルには別のエイリアスが必要です」というエラーが表示されました – CaPsLoCkEr