2016-10-17 3 views
2

테이블을 조인에 1SQL 서버 별개의 행

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 

테이블 내가 휴대 전화 번호

내가

같은 쿼리를 사용에 따라 단지 비 반복 데이터를 원하는 2

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' 

욕망 출력

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

나는 SQL 서버에서 모든 것을 시도했지만 원하는 결과물을 얻지 못해서 나를 도와주세요 !!!!!

+1

는 소리 테이블에서 가장 최근의 데이터를 제공 할 것입니다. 힌트 .... MAX (시간). FWIW, 예제 쿼리의 열이 예제 데이터에 없습니다. 또한, 나는 "시간"이 일종의 날짜 표현이라고 추측하고 있습니까? –

답변

0

이 시도 : 이것은 당신이 집계에 대해 읽어야처럼

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') 
+0

이 쿼리를 실행하면 다음 오류가 발생합니다. – KD11

+0

집계 함수 나 GROUP BY 절에 포함되지 않았기 때문에 'Id'열이 선택 목록에 유효하지 않습니다. – KD11

+0

정확한 스크립트를 사용했습니다. 즉, MAX (R.Time) 함수를 사용하고 있습니다. –

0

이 시도하십시오

with cte as (
    SELECT 
     R.Id, 
     R.MobileNo, 
     R.UId, 
     R.UniqueId, 
     R.Time, 
     ISNULL(C.account,'Not Present'), 
     Row_Number() Over(Partition by R.MobileNo order by [time] Desc) as RN 
    FROM table1 R 
    LEFT JOIN table2 C 
     ON R.uniqueId=C.QId 
    where 
     R.deleteStatus='Y' and C.accountNos ='123456' 
) 
    Select * from cte 
    Where rn=1 
+0

내 컴퓨터 100 대가 영향을받는 90 가지 호환 모드를 변경할 수 없기 때문에 이에 대한 대안이 있습니까 – KD11

+0

데이터베이스 수준을 "공통 테이블 식"및 "Row_Number"로 다운 그레이드해야한다고 생각하지 않습니다. "2008 년 이상 지원됩니다. –

+0

이 쿼리는 벌금을 실행하지만 출력에는 데이터 만 표시되지 않습니다. 예를 들어 검색어에 따라 빈 열이 – KD11

0
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