Home Forums SQL Server 2008 SQL Server Newbies Row_Number With Partition keep min record of partition when count > 1 RE: Row_Number With Partition keep min record of partition when count > 1

  • So something like this:

    /*

    1 5 City A Delete

    3 6 City B Delete

    1 7 City C Delete

    1 8 City E Keep

    2 8 City E Delete

    3 8 City E Delete

    1 9 City F Keep

    2 9 City F Delete

    1 10 City G Keep

    1 10 City G Delete

    1 11 City H Keep

    2 11 City H Delete

    3 11 City H Delete

    4 11 City H Delete

    */

    create table dbo.City(

    CityId int identity(1,1),

    CityName varchar(10),

    DateDeleted datetime null

    );

    insert into dbo.City(CityName)

    values

    ('City A'),

    ('City B'),

    ('City C'),

    ('City E'),

    ('City E'),

    ('City E'),

    ('City F'),

    ('City F'),

    ('City G'),

    ('City G'),

    ('City H'),

    ('City H'),

    ('City H'),

    ('City H');

    with BaseCity as (

    select

    CityId,

    CityName,

    rn = row_number() over (partition by CityName order by CityId),

    cnt = count(*) over (partition by CityName)

    from

    dbo.City

    )

    select

    *

    from

    BaseCity

    where

    rn > 1 or

    cnt = 1;

    go

    with BaseCity as (

    select

    CityId,

    CityName,

    DateDeleted,

    rn = row_number() over (partition by CityName order by CityId),

    cnt = count(*) over (partition by CityName)

    from

    dbo.City

    )

    update BaseCity set

    DateDeleted = getdate()

    where

    rn > 1 or

    cnt = 1;

    go

    select * from dbo.City;

    go

    drop table dbo.City;

    go