2012-09-20 102 views
-4

我有兩個querys:SQL - 加入2個查詢?

Select trunc(create_dtime) as Day, Count(Player_Id) as New_Users 
From Player 
Where Trunc(Create_Dtime) >= To_Date('2012-Jan-01','yyyy-mon-dd') 
Group By Trunc(Create_Dtime) 

每天

Select trunc(create_dtime) as Day,Count(Player_Id) as Retained_Users 
From Player 
Where Trunc(Create_Dtime) >= To_Date('2012-Jan-01','yyyy-mon-dd') 
And Trunc(Init_Dtime) >= Trunc(Sysdate) - 7 
Group By Trunc(Create_Dtime) 
Order By Day Asc 

具有價值,我想這兩個查詢連接在一起,所以我只有一個查詢,而不是兩個。

+0

你爲了得到什麼企圖查詢你想要的結果集? – Ben

+0

桌子的結構是什麼? – alfasin

+0

要回答你的問題,你應該告訴我們你想要什麼,然後在查詢一中有幾天不會發生在查詢二中,反之亦然。 –

回答

1

你不應該需要一個連接有:

SELECT 
    TRUNC(CREATE_DTIME) AS DAY, 
    COUNT(PLAYER_ID) AS NEW_USERS, 
    COUNT(CASE WHEN TRUNC(INIT_DTIME) >= TRUNC(SYSDATE) - 7 THEN PLAYER_ID ELSE NULL END)  AS RETAINED_USERS 
FROM PLAYER 
WHERE TRUNC(CREATE_DTIME) >= TO_DATE('2012-Jan-01','yyyy-mon-dd') 
GROUP BY TRUNC(CREATE_DTIME) 
ORDER BY 1 
0

這只是一個內部聯接,除非您想要在其他查詢中包含沒有匹配的結果。否則,您只需使用:

SELECT * FROM query1 INNER JOIN query2 ON query1.Day=query2.Day 

我應該注意到這是MySQL的語法,我沒有意識到您將它標記爲Oracle。如果不相同,語法可能會相似,但我從未使用過Oracle。

0

我明白了,我只是忘記標籤列。

Select one.Day, one.New_Users, two.Retained_Users 
From 
(
Select trunc(create_dtime) as Day, Count(Player_Id) as New_Users 
From Player 
Where Trunc(Create_Dtime) >= To_Date('2012-Jan-01','yyyy-mon-dd') 
Group By Trunc(Create_Dtime) 
) One 
Inner Join 
(
Select trunc(create_dtime) as Day,Count(Player_Id) as Retained_Users 
From Player 
Where Trunc(Create_Dtime) >= To_Date('2012-Jan-01','yyyy-mon-dd') 
And Trunc(Init_Dtime) >= Trunc(Sysdate) - 7 
Group By Trunc(Create_Dtime) 
Order By Day Asc 
) Two On One.Day=Two.Day 
Order By 1