-4

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

毎日価値があり、これら2つのクエリを結合したいので、2つではなく1つのクエリしかありません。

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 に答える