2016-07-23 2 views
1

나는이 도전을 오늘 일찍 만났습니다. date_added하지만 가장 오래된 this_flag 값을 유지하여 각 레코드의 최신 버전을 유지 : SQL- 간단하지만 까다로운 쿼리 챌린지

는에 SQL 쿼리를 작성합니다. 만 [Name], [DOB][ID]이는 내가 논리가 정확하지 알고

SELECT * FROM Table_C where ID < 3; 

을 무슨 짓을 기록

CREATE TABLE [Table C](
    [Date_added] [varchar](50) NULL, 
    [this_flag] [varchar](1) NULL, 
    [Name] [varchar](50) NULL, 
    [DOB] [int] NULL, 
    [ID] [int] NULL) ; 

Date_added this_flag  Name    DOB   ID 
20150501 Y    Jingleheimerscmidt 19901002 3 
20150501 N    Jingleheimerscmidt 19901002 3 
20150505 Y    Jon     19901001 1 
20150501 N    Jon     19901002 1 
20150501 Y    Jacob    19901001 2 
20150505 N    Jingleheimerscmidt 19901001 3 
20150501 Y    Jingleheimerscmidt 19901001 3 

의 고유성을 결정하는 데 사용됩니다. 그러나 다른 모든 구문은 단지
을 잘라 내지 않았습니다. 누구든지 올바른 SQL 쿼리를 작성하는 방법을 알고 있습니까?

+1

원하는 출력은 무엇입니까? 질문이 확실하지 않습니다. – mohan111

+0

출력은 (1) date_added를 사용하여 각 레코드의 최신 버전을 표시하고 (2) 가장 오래된 this_flag 값을 유지하는 SQL 쿼리가됩니다. 유일한 [이름], [DOB] 및 [ID] 레코드 기록 – Koda

+1

출력을 게시 할 수 있습니까? 당신이 가장 뜻하는 깃발 – mohan111

답변

1

에 체크 아웃은

고작 날짜 순에 따라 순위 "this_flag"열 및 순위 기능에 대한 가장 오래된 기록을 얻기 위해 웹 로그 분석 기능 First_Val을 사용 (당신이 SQL Server 버전 2012 이상이 있다고 가정) 최신 날짜가 항상 = 순위에 제공 한

SELECT * from 
(
    Select * , FIRST_VALUE(this_flag) OVER (PArtition By Name, ID Order by Date_Added) FirstVal_this_flag 
    , RANK() OVER (PArtition By Name, ID Order by Date_Added desc) as Rnk 
    from Table_C C 
) a 
Where Rnk = 1 

편집 있도록 추가 : 샘플의 첫 번째 두 행이 동일한 DATE_ADDED 값과 는 PK의이 또한 동일하다. 아마도이 질문에 오타가 있지만 어떤 경우에는이 쿼리를 처리 할 것입니다. Date_Added로 정렬 한 후 SQL 엔진이 반환 한 첫 번째 this_flag 만 사용합니다.

SELECT Distinct Date_Added , Name, DoB, ID, FirstVal_this_flag from 
(
    Select * , FIRST_VALUE(this_flag) OVER (PArtition By Name, DoB, ID Order by Date_Added) FirstVal_this_flag 
    , RANK() OVER (PArtition By Name, DoB, ID Order by Date_Added desc) as Rnk 
    from Table_C C 
) a 
Where Rnk = 1 
+0

고맙습니다. @objectNotFound. 이번에는 '객체가 발견되었습니다'-이 구문이 작동합니다. 나는이 논리에서 일하고 그것을 작동 시키려고 노력했다. 하지만 까다 롭습니다. 나는 SELECT 문을 수행하고 원하는 출력을 생성했습니다. 그러나 논리는 여전히 나를 벗어났다. rnk 열을 추가하는 것은 매우 유용합니다. 나는 SELF-JOIN을하는쪽으로 기울고 있었다. 통찰력을 주셔서 감사합니다. – Koda

+0

@Koda 여러분을 진심으로 환영합니다. 까다로운 질문을 제기 한 경우 1을 더합니다. 나는이 일을 좋아했다. – objectNotFound