首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

每隔时间就添加若干条数据,现在只想保留最后一次添加的如何做

2013-07-01 
每隔时间就添加若干条数据,现在只想保留最后一次添加的怎么做表结构CREATE TABLE tb([公司] [nvarchar](50

每隔时间就添加若干条数据,现在只想保留最后一次添加的怎么做
表结构

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

热点排行