2014-05-20 112 views
0

我需要結合兩個SQL查詢,我正在努力想通過它來傷害自己。我的第一個查詢獲取每天的訪問者數量,第二個查詢獲取每天唯一訪問者的數量。結合兩個SQL查詢以防止必須使用循環

查詢1 - 爲了得到訪問

SELECT Count(server_instances.game_id) AS visit_count, 
     refined_player_visits.visit_date AS visit_date 
FROM work.refined_player_visits 
     INNER JOIN tapi.server_instances 
       ON server_instances.server_id = refined_player_visits.server_id 
WHERE (server_instances.game_id = "31") 
GROUP BY visit_date; 

查詢2的數量 - 爲了得到獨一無二的訪問

SELECT Count(visit_counts.unique_visit_date) AS unique_visits 
FROM (SELECT Count(refined_player_visits.server_id) AS visit_count, 
       refined_player_visits.visit_date  AS unique_visit_date 
     FROM refined_player_visits 
       INNER JOIN server_instances 
         ON server_instances.server_id = 
          refined_player_visits.server_id 
     WHERE (server_instances.place_id = "31" 
       AND refined_player_visits.visit_date <= CURRENT_VISIT_DATE) 
     GROUP BY refined_player_visits.roblox_id) AS visit_counts 
WHERE (visit_counts.visit_date = CURRENT_VISIT_DATE 
     AND visit_counts.visit_count = 1) 

的數量,因爲這最初是爲一個Web應用程序,我從第一個查詢中得到了結果並循環遍歷每個結果之一。在每一個循環,我會做第二次查詢(其中CURRENT_VISIT_DATE實際上是從第一個查詢的visit_date

我想用JOIN把它變成一個查詢,也許吧。我遷移到另一個系統,我沒有選擇在循環語句中執行第二個查詢,所以我只想結合這兩個查詢,儘管我似乎無法將我的頭包裹起來,但是,

+1

你能提供一個sqlfiddle.com數據示例嗎? –

回答

0

這是否會返回您想要的內容?

SELECT * 
FROM 
    (
    SELECT Count(server_instances.game_id) AS visit_count, 
      refined_player_visits.visit_date AS visit_date 
    FROM work.refined_player_visits 
    INNER JOIN tapi.server_instances 
     ON server_instances.server_id = refined_player_visits.server_id 
    WHERE (server_instances.game_id = "31") 
    GROUP BY visit_date 
    ) AS FirstQuery, 
    (
    SELECT Count(visit_counts.unique_visit_date) AS unique_visits 
    FROM (SELECT Count(refined_player_visits.server_id) AS visit_count, 
        refined_player_visits.visit_date  AS unique_visit_date 
      FROM refined_player_visits 
        INNER JOIN server_instances 
          ON server_instances.server_id = 
           refined_player_visits.server_id 
      WHERE (server_instances.place_id = "31" 
        AND refined_player_visits.visit_date <= FirstQuery.visit_date) 
      GROUP BY refined_player_visits.roblox_id) AS visit_counts 
    WHERE (visit_counts.visit_date = FirstQuery.visit_date 
      AND visit_counts.visit_count = 1) 
    ) AS SecondQuery