>

다음과 같은 테이블이 있습니다 :

ID Date Name Age 1 10/04/2015 Theja 24 1 28/04/2015 Theja1 26 1 14/07/2015 Theja2 45 1 30/07/2015 Theja2 45 1 30/08/2015 Theja3 54 2 10/04/2016 Jaya 23 2 28/04/2016 Jaya 23 2 14/05/2016 Jaya1 65 2 30/05/2016 Jaya1 65

그러나 나는 다음과 같은 출력을 원한다 :

ID Date Name Age 1 28/04/2015 Theja1 26 1 01/05/2015 Theja1 26 1 01/06/2015 Theja1 26 1 30/07/2015 Theja2 45 1 30/08/2015 Theja3 54 2 28/04/2016 Jaya 23 2 30/05/2016 Jaya1 65

매월 최대 1 개의 레코드를 고려하고 ID에 대해 누락 된 월이 있으면 이전 레코드가 누락 된 월에 채워지는 것을 고려하십시오.


  • 답변 # 1

    다른 데이터베이스는 날짜를 처리하는 방법이 다릅니다. 다음은 한 달에 한 행을 얻는 ANSI 표준 방법입니다.

    select id, min(date)
    from t
    group by id,
             extract(year from date), extract(month from date);
    
    

  • 답변 # 2

    솔루션을 시도했지만 다음과 함께 제공되었지만 출력에 누락 된 행을 삽입하려면 달력 테이블이 필요합니다. 여기에 제공된 SQL Server 기반 솔루션

    데이터 설정 :

    create table temptable (
      id int,
      [date] date,
      name varchar (50),
      age int
      );
      insert into temptable values
    (1,'04-10-2015','Theja',24)
      insert into temptable values
    (1,'04-28-2015','Theja1',26)
      insert into temptable values
    (1,'07-14-2015','Theja2',45)
      insert into temptable values
    (1,'07-30-2015','Theja2',45)
      insert into temptable values
    (1,'08-30-2015','Theja3',54)
      insert into temptable values
    (2,'04-10-2016','Jaya',23)
      insert into temptable values
    (2,'04-28-2016','Jaya',23)
      insert into temptable values
    (2,'05-14-2016','Jaya1',65)
      insert into temptable values
    (2,'05-30-2016','Jaya1',65)
    
    

    다음 문제는 복제 문제가 발생할 때까지 완료됩니다. 그러나 누락 된 행을 얻으려면 달력 테이블을 구현해야합니다. 캘린더 테이블에 가입 한 다음 cte3의 출력을 사용하여 누락 된 데이터를 얻을 수 있습니다.

    with cte1 as (
    select *, 
     row_number() over ( partition by month([date]) order by [date]) as rownm,
     concat(id,format([date],'MMyyyy')) as unqcol
    from temptable
    ) , cte2 as 
    (
    select unqcol, max(rownm) as maxdt
    from cte1
    group by unqcol
      ), cte3 as
     ( select a.*,  lead(a.[date]) over (partition by a.id order by a.id,a.[date]) as NextDate from 
      cte1 a inner join cte2 b
      on a.unqcol=b.unqcol and a.rownm=b.maxdt
      )
      select c.id,c.[date],c.name,c.age,c.NextDate from cte3 c
      order by c.[date]
    
    

관련 자료

  • 이전 Bigquery에서 GCS 분할 크기로 테이블 내보내기
  • 다음 sql server - SQL에서 열 반올림