-4

我有两个查询:

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

每天都有一个价值,我想将这两个查询连接在一起,所以我只有一个查询而不是两个。

4

3 回答 3

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
于 2012-09-20T23:40:35.567 回答
0

这只是一个内部联接,除非您想在其他查询中包含不匹配的结果。否则,您只需使用:

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

我应该注意这是 MySQL 的语法,我没有意识到您将其标记为 Oracle。如果不完全相同,语法可能会相似,但我从未使用过 Oracle。

于 2012-09-20T21:36:47.720 回答
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
于 2012-09-20T21:43:36.703 回答