sql语句 同一时间出现2条数据,对比其中某一字段,删除其中较小的一条
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句 同一时间出现2条数据,对比其中某一字段,删除其中较小的一条相关的知识,希望对你有一定的参考价值。
时间 a b c
2013/1/17 22:10:02 13 57 310
2013/1/17 22:10:02 13 57 178
例如:
当a=13,b=57,同一时间出现2条数据,删除c字段较小的一条数据
求帮忙
这样就可以取两条数据 最小的数据进行删除!追问
你这也没有判断同一时间啊
追答delete from table where c in (
select min(c) from table where time in (
select time from table where a='13' and b='57' group by time having COUNT (time)>1))
这样就可以删除时间是一样而且有两条满足 a='13' and b='57'的数据。删除C值最小的那一条。看是否OK~!
错误You can't specify target table 'zr_controllercurrentvalue' for update in FROM clause。
三个from table 都是我表名是吗?
是啊 ~!table是表名啊 ~!
追问还是不行,方便qq说话吗
追答我 在 公司的。上不了,我实验过的。可以按照你的要求删除数据。
delete from 表 where c in (
select min(c) from 表 where 时间 in (
select 时间 from 表 where a='13' and b='57' group by 时间 having COUNT (时间)>1))
table是你的表名, ABC是字段名字,我里面的time是你的 时间 字段
原理很简单 ,就是先统计出出现时间一样而且大于两条的数据,进行比对找出最小值的那一条数据进行删除就可以了。
delete from 表 where C in (select min(C) from 表 where 时间 in (select 时间from zr_表 where bid = 000019 and fid = 0011 and A='13' and B='57' group by 时间 having COUNT(时间)>1));
还是不对,我用的mysql 数据库。
报错:
你不能指定目标表的更新zr_controllercurrentvalue在FROM子句
你把这条拼接语句分开执行下看能否查到数据?
先执行最里层的select语句看有数据没?
:select 时间 from 表 where a='13' and b='57' group by 时间 having COUNT (时间)>1
然后再执行
:
select min(c) from 表 where 时间 in (
select 时间 from 表 where a='13' and b='57' group by 时间 having COUNT (时间)>1
)
最后
:
select * from 表 where c in (
select min(c) from 表 where 时间 in (
select 时间 from 表 where a='13' and b='57' group by 时间 having COUNT (时间)>1
)
)
看 是哪一步出错了?
;with cte as
(select *,row_number() over(partition by 时间,a,b order by c desc) rn from tb )
delete cte where rn>1追问
mysql数据库,有点没看懂
追答mysql~先查询一下在改成delete
delete tb where exists
(select 1 from tb as t where tb.时间=t.时间 and tb.a=t.a and tb.b=t.b
and t.c>tb.c)
还是没弄出来
追答这样查询查询不到较小值吗?
select * from tb where exists
(select 1 from tb as t where tb.时间=t.时间 and tb.a=t.a and tb.b=t.b
and t.c>tb.c)
我刚接触不久,你有什么聊天方式没,qq什么的
追答额。。上班中,什么都不能用,就把上面的tb换成你的表名就行了吧,至少查询是可以的吧
追问as t中t是什么,tb.时间=t.时间 中tb是表名,t也是表名吗,可能问的有点弱智,刚毕业的,大哥多帮帮忙
追答as t定义了个表别名,因为这是同表的相关子查询,定义别名用来区分内部字表与外部主表
tb.时间=t.时间这个tb是你的表名,定义了表别名的表不能再用自身的表名引用,只能用别名,所以tb.时间就代表外部的主表,如果这里省略了引用默认是内部子表列,所以要加tb.这样的引用
from (select a.*,row_number() over(partiton by 时间,a,b order by c desc) rn
from 表A a)
where rn = 1追问
我想把错误数据删除
第5个回答 2013-03-16 ; SQLSERVER2005以上适用于热膨胀系数(SELECT *,ROW_NUMBER()OVER(分区时,A,B由C递减顺序)RN TB)的
删除CTE的地方RN> 1
SQL语句把同一个表中的a字段中的数据复制到另一个字段b中
客户表cust,里面有两个字段unit和s8_16两个字段,怎么把unit中的数据复制到s8_16中,并同时清空unit中的数据
参考技术ASQL语句把同一个表中的a字段中的数据复制到另一个字段b中
的方法。
一、实现方法
1、比如表格:aaa,表格结构及数据如图:
2、使用SQL语句:update
aaa
set
b
=
a
,将a字段的值都复制到了b字段,结果如图:
二、需要注意,a字段与b字段的数据类型要相同,不同的话执行语句系统会报错,当然也可以通过cast()、convert()之类的函数,进行数据类型转换之后再进行更新。
以上是关于sql语句 同一时间出现2条数据,对比其中某一字段,删除其中较小的一条的主要内容,如果未能解决你的问题,请参考以下文章
求SQL语句,统计一张表格中,某一时间段,例如连续10天,每间隔2小时,该表中增加的记录条数。