每隔时间就添加若干条数据,现在只想保留最后一次添加的怎么做
表结构
CREATE TABLE tb(
[公司] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[产品] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[CreateTime] [datetime] NULL,
[id] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]
原数据
公司 产品 更新时间
a司 苹果 2013-1-12
a司 香蕉 2013-1-12
a司 苹果 2013-1-10
a司 香蕉 2013-1-10
b司 苹果 2013-1-10
b司 香蕉 2013-1-10
b司 最后一次是10号更新的,所以保留
只保留最后一次添加时间 的记录,如何操作
1删除后表内数据:
a司 苹果 2013-1-12
a司 香蕉 2013-1-12
b司 苹果 2013-1-10
b司 香蕉 2013-1-10
2不删除只查询的结果:
a司 苹果 2013-1-12
a司 香蕉 2013-1-12
b司 苹果 2013-1-10
b司 香蕉 2013-1-10
这两条语句 该怎么写
[解决办法]
CREATE TABLE tb3(
[公司] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[产品] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[CreateTime] [datetime] NULL,
[id] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]
insert into tb3
select 'a司', '苹果', '2013-1-12'
union all
select 'a司' , '香蕉', '2013-1-12'
union all
select 'a司' , '苹果', '2013-1-10'
union all
select 'a司' , '香蕉', '2013-1-10'
union all
select 'b司' , '苹果', '2013-1-10'
union all
select 'b司' , '香蕉', '2013-1-10'
----删除后
delete from tb3
where id not in
(
select id from
(
select 公司,产品,MAX(CreateTime)time from tb3
group by 公司,产品
)a
left join
(
select * from tb3
)b
on a.公司=b.公司
and a.产品=b.产品
and a.time=b.CreateTime
)
----查询
select 公司,产品,MAX(CreateTime)
from tb3
group by 公司,产品
order by 公司
CREATE TABLE tb
([公司] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[产品] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[CreateTime] [date] NULL,
[id] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]
insert into tb
select 'a司', '苹果', '2013-1-12' union all
select 'a司', '香蕉', '2013-1-12' union all
select 'a司', '苹果', '2013-1-10' union all
select 'a司', '香蕉', '2013-1-10' union all
select 'b司', '苹果', '2013-1-10' union all
select 'b司', '香蕉', '2013-1-10'
-- 只保留最后一次添加时间 的记录
delete a
from tb a
where exists
(select 1 from tb b
where b.[公司]=a.[公司]
and b.[CreateTime]>a.[CreateTime])
-- 1删除后表内数据
select [公司],[产品],[CreateTime] from tb
/*
公司 产品 CreateTime
---------- ---------- ----------
a司 苹果 2013-01-12
a司 香蕉 2013-01-12
b司 苹果 2013-01-10
b司 香蕉 2013-01-10
(4 row(s) affected)
*/
CREATE TABLE tb
([公司] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[产品] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[CreateTime] [date] NULL,
[id] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]
insert into tb
select 'a司', '苹果', '2013-1-12' union all
select 'a司', '香蕉', '2013-1-12' union all
select 'a司', '苹果', '2013-1-10' union all
select 'a司', '香蕉', '2013-1-10' union all
select 'b司', '苹果', '2013-1-10' union all
select 'b司', '香蕉', '2013-1-10'
-- 2不删除只查询的结果
select [公司],[产品], [CreateTime]
from tb a
where not exists
(select 1 from tb b
where b.[公司]=a.[公司]
and b.[CreateTime]>a.[CreateTime])
/*
公司 产品 CreateTime
---------- ---------- ----------
a司 苹果 2013-01-12
a司 香蕉 2013-01-12
b司 苹果 2013-01-10
b司 香蕉 2013-01-10
(4 row(s) affected)
*/
create table #test(company varchar(25),production varchar(25),updatetime datetime)
insert into #test select 'a司','苹果','2013-1-12 10:15:23' union all
select 'a司','香蕉','2013-1-12 10:15:23' union all
select 'a司','苹果','2013-1-11 11:34:22' union all
select 'a司','香蕉','2013-1-10 11:34:22' union all
select 'b司','苹果','2013-1-10 23:12:44' union all
select 'b司','香蕉','2013-1-10 23:12:44'
select t1.* from #test t1 where t1.updatetime in (select MAX(updatetime) updatetime from #test group by company)
drop table #test
companyproductionupdatetime
a司苹果2013-01-12 10:15:23.000
a司香蕉2013-01-12 10:15:23.000
b司苹果2013-01-10 23:12:44.000
b司香蕉2013-01-10 23:12:44.000