sql >> データベース >  >> RDS >> Sqlserver

データベース内の重複する一時レコードをマージします

    すべての開始日と終了日が連続していることを確認できる場合は、これを試してください:

    with  t1 as  --tag first row with 1 in a continuous time series
    (
    select t1.*, case when t1.column1=t2.column1 and t1.column2=t2.column2
                      then 0 else 1 end as tag
      from your_table t1
      left join your_table t2
        on t1.EmployeeId= t2.EmployeeId and dateadd(day,-1,t1.StartDate)= t2.EndDate
    )
    select t1.EmployeeId, t1.StartDate, 
           case when min(T2.StartDate) is null then null
                else dateadd(day,-1,min(T2.StartDate)) end as EndDate,
           t1.Column1, t1.Column2
      from (select t1.* from t1 where tag=1 ) as t1  -- to get StartDate
      left join (select t1.* from t1 where tag=1 ) as t2  -- to get a new EndDate
        on t1.EmployeeId= t2.EmployeeId and t1.StartDate < t2.StartDate
     group by t1.EmployeeId, t1.StartDate, t1.Column1,   t1.Column2
    


    1. OracleSQLトリガーのテーブルの変更

    2. t-sqlのtinyintをc#で整数に変換するにはどうすればよいですか?

    3. MySQLテーブルの最大行数を設定するにはどうすればよいですか?

    4. IN句のすべての値を一致させる