Sql server sql server连接上两个表的不同行

Sql server sql server连接上两个表的不同行,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,表1 表2 id mobile uid uniqueid time 1 9999 1232 200100 10/6/15 2 9999 1232 200100 11/5/14 3 8888 1232 200100 18/4/16 4 9999 1232 200100 07/7/15 5 9999 1232 200100 4/11/16 根据手机号码,我只需要不重复的数据 我以前是这样的 id

表1

表2

id mobile uid uniqueid   time

1   9999   1232    200100   10/6/15

2   9999   1232    200100   11/5/14

3   8888   1232    200100   18/4/16

4   9999   1232    200100   07/7/15

5   9999   1232    200100   4/11/16
根据手机号码,我只需要不重复的数据

我以前是这样的

id   Qid    account

1    200100   123456

2    200100   123456

3    200100   123456
欲望输出是

SELECT R.Id,R.MobileNo,R.UId,R.UniqueId,R.Time, 
ISNULL(C.account,'Not Present'), 
FROM table1 R LEFT JOIN table2 C
 ON R.uniqueId=C.QId where 
 and R.deleteStatus='Y' and C.accountNos ='123456' 
我尝试了sql server中的每一件事,但无法获得所需的输出,请帮助我

请尝试以下操作:

mobile  uid    uniqueid  time    account
9999    1232    200100  4/11/16  123456
8888    1232    200100  18/4/16  123456

试试这个:这将给出表中最新的数据

CREATE TABLE #TABLE1
(


ID INT, MOBILE INT, UID INT, UNIQUEID INT,  TIME DATE
)


INSERT INTO #TABLE1 VALUES(1,9999,1232,200100,'6-10-15')
INSERT INTO #TABLE1 VALUES(2,9999,1232,200100,'5-11-14')
INSERT INTO #TABLE1 VALUES(3,8888,1232,200100,'4-18-16')
INSERT INTO #TABLE1 VALUES(4,9999,1232,200100,'7-7-15')
INSERT INTO #TABLE1 VALUES(5,9999,1232,200100,'11-4-16')


SELECT * FROM #TABLE1

CREATE TABLE #B
(
ID INT,   QID INT,   ACCOUNT INT)
INSERT INTO #B VALUES

(1,200100,123456),
(2,200100,123456),
(3,200100,123456)


;WITH CTE AS
(

SELECT DISTINCT T1.MOBILE,UID,UNIQUEID,TIME,ACCOUNT, 
ROW_NUMBER() OVER(PARTITION BY MOBILE ORDER BY [TIME] DESC) AS RN
FROM #TABLE1 T1 JOIN #B T2 ON T1.ID=T1.ID
AND T1.UNIQUEID=T2.QID 

)
SELECT  MOBILE,UID,UNIQUEID,TIME,ACCOUNT

FROM CTE
WHERE RN=1

听起来你应该读一下聚合。提示…最大(时间)。FWIW,示例查询中的列不存在于示例数据中。此外,我猜“时间”是日期的某种表示形式?是否有其他替代方法,因为我无法将兼容模式从机器的100更改为90其他受影响的内容我认为您不需要将数据库级别降级为“带公共表表达式”和“行数”在2008年及以上版本上受支持。此查询将运行,但在输出中它不显示数据,只显示空白列根据示例查询,您指定只需要已删除的记录R.deleteStatus='Y',该记录未显示在示例数据中,这可能会影响结果。因此,请删除Where条件并重新运行。当我启动此查询时,它生成的以下错误列“Id”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。请尝试使用精确脚本,即我使用了聚合函数
MAX(R.Time)
CREATE TABLE #TABLE1
(


ID INT, MOBILE INT, UID INT, UNIQUEID INT,  TIME DATE
)


INSERT INTO #TABLE1 VALUES(1,9999,1232,200100,'6-10-15')
INSERT INTO #TABLE1 VALUES(2,9999,1232,200100,'5-11-14')
INSERT INTO #TABLE1 VALUES(3,8888,1232,200100,'4-18-16')
INSERT INTO #TABLE1 VALUES(4,9999,1232,200100,'7-7-15')
INSERT INTO #TABLE1 VALUES(5,9999,1232,200100,'11-4-16')


SELECT * FROM #TABLE1

CREATE TABLE #B
(
ID INT,   QID INT,   ACCOUNT INT)
INSERT INTO #B VALUES

(1,200100,123456),
(2,200100,123456),
(3,200100,123456)


;WITH CTE AS
(

SELECT DISTINCT T1.MOBILE,UID,UNIQUEID,TIME,ACCOUNT, 
ROW_NUMBER() OVER(PARTITION BY MOBILE ORDER BY [TIME] DESC) AS RN
FROM #TABLE1 T1 JOIN #B T2 ON T1.ID=T1.ID
AND T1.UNIQUEID=T2.QID 

)
SELECT  MOBILE,UID,UNIQUEID,TIME,ACCOUNT

FROM CTE
WHERE RN=1
SELECT R.Id,R.MobileNo,R.UId,R.UniqueId,MAX(R.Time),ISNULL(C.account,'Not Present'), 
FROM table1 R 
LEFT JOIN table2 C ON R.uniqueId=C.QId AND C.accountNos ='123456'   
WHERE R.deleteStatus='Y' 
GROUP BY R.Id,R.MobileNo,R.UId,R.UniqueId,ISNULL(C.account,'Not Present')