2016-10-05 1 views
1

SQL 쿼리를 기반으로 보고서를 생성하려고합니다. Source = "Web" 및 기타 Source <> "Web"없이 보고서를 생성해야합니다. 나는 이것에 대한 여러 게시물을 읽었지만 그들 중 아무도 내게 대답을 주었다. 아래에서 쿼리하십시오.단일 쿼리 두 반대 그룹 by

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")없이되어야 다른. 나는 Union과 Inner를 시도했는데 둘 다 작동하지 않았다. 도움이 필요합니다.

+2

언제 mySQL이 창 기능을 지원하기 시작 했습니까? (질문 * mySQL * 꽤 그들은 거기에서 작동하지 않는다고 ... 그래서 RDBMS이 무엇입니까?) – xQbert

+0

당신은 왜 UNION ALL을 사용하지 않습니까? – Teja

+0

두 분리 된 작업 쿼리 .. 표시 및 필요한 결과를 설명하십시오 – scaisEdge

답변

0

"웹"을 선택할지 여부를 결정하는 또 다른 변수는 '예'또는 '아니오'로 적절하게 채워집니다. 그런 다음 :

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

것으로 가정 (어쨌든 따옴표없이 Web를 호출 할 수있는) "Web"라는 이름의 열입니다. 반면 Web이 문자열 인 경우 작은 따옴표 ('Web')를 사용하십시오.

+0

위의 테이블 이름을 "?" "예"는 여기서 논증과 같습니다. 그게 효과가 있을지 모르겠지만 아프다! – pruthvi

+0

매개 변수로 tabe 이름을 전달할 수 있다는 것에 놀랐습니다. 두 가지의 결합이 효과가 없다고 생각할 수도 있습니다. 나는 모른다. 'YES'또는 'YES'를 전달하는 데 차이가있을 수 있습니다. –

+0

매개 변수로 전달할 수 있습니다. @Thorsten Kettner – pruthvi