SQL Server 操作数据库数据的问题

原本从2017-11-28号到今天12-11号 这段时间内User表中每小时有100条数据 现在想删除数据但是每
小时要保留一组 相当于一天24条数据 求sql语句怎么写?
时间字段是dactime

6个回答

参考一下:

分组后排序,赋值rownum,然后取rownum=1,就是要保留的一组, 最后删除除此之外的所有数据。

 delete * from MyTable b where b.ID not in
(
    select  t.ID  from 
    (
        select ID, row_number() over(partition by MyTime order by UserName desc) rownum from MyTable
    ) t  where t.rownum = 1 
)

没有一个可以用的,全部有问题

分组一下再进行处理。

with tabs as(
select *,
row_number() over(
partition by substring(CONVERT(varchar(100), [DacTime],120),1,13)
order by [DacTime] desc) as num_id
from [CHCMASV21].[dbo].[INMV_DeviceDataHist]
)
delete from tabs where num_id != 1;
这也是一种解决办法

qq_37170555
听雨停了 回复小菜来袭: 那就是每小时随机保留一条了?一个小时有一百条数据,一百条数据肯定不可能一摸一样吧。
接近 2 年之前 回复
u011954277
小菜来袭 回复听雨停了: 我说了每小时保留一条呀
接近 2 年之前 回复
qq_37170555
听雨停了 每小时保留一条,是随便保留呢,还是保留最大时间或者最小时间的呢?这些问题都得说清楚这样别人才有好的解决方案出来给你
接近 2 年之前 回复
 SELECT * FROM (SELECT *,DATE(stime) AS d,SUBSTRING(stime,12,2) as h FROM tb ORDER BY 字段,stime DESC where stime<=**** and $stime>=****) tb2
GROUP BY 字段,sd,h

delete user u where u.dactime>='2017-11-28' and u.dactime<'2017-12-11' and u.id not in (select min(id) from user u2 groupby DATEPART(yyyy,u2.dactime),DATEPART(mm,u2.dactime),DATEPART(dd,u2.dactime),DATEPART(hh,u2.dactime))

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!