Sql server sql server连接上两个表的不同行
表1 表2Sql 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
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')