2016-06-21 4 views
-1

SQL 서버에서 최대 날짜가 아닌 다른 테이블에서 데이터를 제거하는 방법은 무엇입니까? (HAVING MAX(dated) != date)과 같은 조건을 시도했지만 작동하지 않습니다.최대 날짜와 관련된 중복을 제거하십시오.

여러 개의 열이있는 테이블이 있다고 가정 해 보겠습니다. 첫 번째는 모바일 번호이고 두 번째는 Date이며 나머지는 bla bla입니다. 휴대 전화 번호가 다른 날짜로 반복되므로 최대 날짜가 아닌 휴대 전화 번호를 삭제하고 싶습니다. 다른 작품에서는 MAX 날짜가있는 숫자 만 보관하고 중복을 제거하고 싶습니다. 이 쿼리는 귀하의 요구 사항을 충족하는 경우 최대 날짜 이외의 기록을 삭제하는

친절하게 도와주세요 ..

+3

적어도 관련 테이블의 DDL, 샘플 데이터 및 원하는 결과에 대한 일부 DML을 포함하도록 질문을 편집하십시오. –

+0

친애하는 @ZoharPeled 게시물이 이제 편집되었습니다. 친절하게 의견을 보내주십시오. –

답변

2

한 가지 방법 :

(작성 및 샘플 테이블을 채우는 우리에게 당신의 다음 질문이 단계)

DECLARE @T as TABLE 
(
    Mobile char(1), 
    Dated date 
) 

INSERT INTO @T VALUES 
('A', GETDATE()), 
('A', GETDATE() - 1), 
('A', GETDATE() + 2), 
('B', GETDATE() - 1), 
('B', GETDATE() + 3), 
('B', GETDATE()) 

삭제 문

012,355을 저장하십시오
+0

굉장, 고마워요 @Zohar –

+0

[도움을 기쁘게 : -)] (http://meta.stackoverflow.com/questions/291325/how-to-show-appreciation-to-a-user-on-stackoverflow/291327 # 291327) –

0

사용이 쿼리는

DECLARE @maxDate DATE 

SELECT TOP 1 @maxDate = CAST(CreatedDate AS DATE) 
FROM <Table1> 
ORDER BY CreatedDate DESC 

DELETE 
FROM <Table1> 
WHERE CAST(CreatedDate AS DATE) != @maxDate 

답변으로이를 표시하십시오. OUTER의 도움으로

+0

죄송합니다.이 쿼리가 내 요구 사항을 충족하지 않습니다. 빠른 응답 감사합니다. –

1

또 하나의 방법은 적용 : 내부가 삭제 성명에서 파생 테이블 조인 사용 할

DELETE FROM y 
FROM YourTable y 
OUTER APPLY (
    SELECT top 1 * 
    FROM YourTable 
    WHERE y.ID = ID 
    ORDER BY dated DESC 
) as y2 
WHERE CAST(y.dated as date) < CAST(y2.dated as date) 
+0

이 하위 쿼리에 따르면 모든 데이터는 MAX 날짜 하나만 제외하고 삭제되므로이 방법은 효과적이지 않습니다. –

+0

내 대답이 바뀌 었습니다. 제발, 확인해주세요. – gofr1

관련 문제