2016-10-05 5 views
1

私はSQLクエリに基づいてレポートを生成しようとしています。 Source = "Web"とその他のレポートを生成する必要があります(Source <> "Web"なし)。私はこれについて複数の投稿を読んだが、誰も私に答えを与えなかった。以下の質問。単一のクエリ2つの反対のグループ

SELECT 
    content_provider, 
    provider_asset_id, 
    device_id, 
    carrier, 
    T.profile_id, 
    phonenumber, 
    dma, 
    CAST(asset_play_duration as decimal(15, 3)) AS asset_play_duration, 
    series_title, 
    episode_title, 
    source, 
    vsession_id AS session_id, 
    event_day 
FROM 
    (SELECT 
    device_id, 
    program_asset_id, 
    vsession_id, 
    source, 
    vsession_start_ts, 
    batchtime, 
    vsession_end_ts, 
    IF (studio = '', network_tag, studio) AS content_provider, 
    provider_asset_id, 
    carrier, 
    profile_id, 
    phonenumber, 
    series_title, 
    episode_title, 
    content_type, 
    dma, 
    asset_play_duration, 
    source, 
    event_day, 
    ROW_NUMBER() OVER (PARTITION BY device_id, program_asset_id, vsession_id, vsession_start_ts ORDER BY batchtime DESC) AS rank 
    FROM ?) T 
LEFT JOIN ? tp 
ON T.profile_id = tp.profile_id 
WHERE tp.profile_id IS NULL 
AND T.rank = 1 
**AND T.source <> "Web"** 
AND T.event_day BETWEEN ? AND ? 

つのレポートは、上記条件(T.Source <>"web")であるべきであり、他方はフィルタ(T.Source = "Web")なしでなければなりません。私はユニオンとインナーが参加しようとしましたが、どちらもうまくいきませんでした。どんな助けも必要です。

+2

いつmySQLがウィンドウ関数をサポートし始めましたか? (質問は* mySQLとしてタグ付けされています*彼らはそこではうまくいきません...だからRDBMSは何ですか?) – xQbert

+0

なぜUNION ALLを使用しませんか? – Teja

+0

2つの分離した作業クエリ..を表示し、必要な結果を説明してください – scaisEdge

答えて

0

"Web"を選択するかどうかの別の変数を渡します。それに応じて、 'YES'または 'NO'を入力します。その後:

AND ((? = 'YES' AND T.source = "Web") OR T.source <> "Web") 

これは(とにかく引用符なしWebを呼び出すことができます)"Web"という名前の列であるが前提としています。一方、Webが文字列であると仮定されている場合は、一重引用符('Web')を使用します。

+0

私は上記のテーブル名を "?" 「はい」はここでの議論に似ています。それがうまくいくかどうかは分かりませんが、うんざりします! – pruthvi

+0

私はあなたがパラメータとしてタブー名を渡すことができることに驚いていました。両方の組み合わせがうまくいかないことは間違いありません。知りません。 'YES'か' YES'を渡すかどうかは違いがあります。 –

+0

パラメータとして渡すことができます@Thorsten Kettner – pruthvi

関連する問題