2012-09-20 103 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