2017-09-26 7 views
-1

의 변경 내용 만 가져 오기 : 내가해야 할 것은이 결과의 날짜 사이의 데이터가 같은 경우를 확인하는 것입니다내가 날짜를 기준으로 정렬되는 등 그 이하 데이터베이스에 뷰를 가지고있는 데이터베이스

date   company_name  share 
25.7.2016  Apple    20 
25.7.2016  Samsung    50 
26.7.2016  Apple    20 
26.7.2016  Samsung    50 
27.7.2016  Apple    30 
27.7.2016  Samsung    40 

. 그렇다면 첫 번째 날짜의 데이터 만 표시하십시오.

예를 들어, 25.7.2016 날짜는 26.7.2016 날짜와 동일한 데이터를 가지며 26.7.2016 날짜는 이전 날짜와 동일한 데이터를 갖지 않습니다.

그래서 나는 같이 내보기를 필요

date   company_name  share 
25.7.2016  Apple    20 
25.7.2016  Samsung    50 
27.7.2016  Apple    30 
27.7.2016  Samsung    40 

내가 어떻게 할 수 있습니까?

+4

에서 작동 표준 SQL이다. –

+0

@ VamsiPrabhala는 뷰가 실제 테이블이라고 가정 할 수 있습니다. 두 개의 결과 날짜 사이에 다른 레코드 만 반환하는 쿼리가 필요합니까? –

+2

어떤 데이터베이스를 사용하고 있습니까? SQL 서버, MySQL, 다른 사람? –

답변

2

을 이전 행의 다음 prev_share is null가 필요

select date, company_name, share 
from (
    select date, company_name, share, 
     lag(share) over (partition by company_name order by date) as prev_share 
    from sometable 
) x 
where (prev_share is null or prev_share <> share) 
order by date, company_name; 

는 결과에서 "그룹"(= 파티션)의 첫 번째 행을 포함한다. 이것은 lag() 함수의 기본값으로도 수행 될 수 있습니다.

당신은 당신의 DBMS를 언급하지 않았지만, 위의 데이터베이스가 사용되는 태그를하시기 바랍니다 어떤 modern DBMS

-1

당신은 당신이, 내가 당신에게 의사 코드에서 논리적 인 솔루션을 제공하고있어 함께 작업중인 데이터베이스 언급하지 않았기 때문에이이 값에 액세스 할 수 윈도우 함수 lag()를 사용하여 수행 할 수 있습니다

if previous company_name = company_name AND previous share = share 
if true then nothing