Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-Join 2查询?_Sql_Oracle - Fatal编程技术网

SQL-Join 2查询?

SQL-Join 2查询?,sql,oracle,Sql,Oracle,我有两个问题: 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 New_Users
From Player
Where Trunc(Create_Dtime) >= To_Date('2012-Jan-01','yyyy-mon-dd')
Group By Trunc(Create_Dtime)


每天都有一个值,我希望将这两个查询连接在一起,因此我只有一个查询而不是两个查询。

这只是一个内部连接,除非您希望在另一个查询中包含不匹配的结果。否则,您只需使用:

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

我应该注意到这是MySQL的语法,我不知道你把它标记为Oracle。语法可能会相似,如果不完全相同的话,但我从未使用过Oracle。

我知道了,只是忘了给列添加标签

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

您不需要在那里加入:

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

为了得到您想要的结果集,您尝试了什么查询?表的结构是什么?要回答您的问题,您应该向我们展示您想要的是什么,然后查询一中有几天没有出现在查询二中,反之亦然。很抱歉,问题/答案不是很清楚。我想我已经处理好了。请你再投票好吗?
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