时间 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
)
)
看 是哪一步出错了?
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.这样的引用
我想把错误数据删除
sql语句 同一时间出现2条数据,对比其中某一字段,删除其中较小的一条
delete from table where c in (select min(c) from table where a='13' and b='57')这样就可以取两条数据 最小的数据进行删除!
谁给我写个sql语句:关于上一条记录和下一条记录的对比
where a.servicer_id=b.service_id and b.roworder=a.roworder+1;其中 t1表名 servier_id 是一个关键,比如一个员工的ID s_time 记录时间 做两个子查询,对每一个员工的记录都按时间倒序排列 where条件把同一员工的前后两条记录关联起来。
两个配置相同的oracle数据库,查询同一张表内的数据时。count某字段的值...
执行快的那个有可能创建了索引,或者执行过表分析操作,通常表分析操作会统计表的元信息,包括记录数、表数据占用空间等,而索引上也有表中节点的数量信息。你可以看一下执行计划,通过执行计划就可以知道原因了。
SQL语句,同一个表中,两个字段相减,应该怎么写?
在oracle中加减乘除都是可以直接select的。select 1+2 from dual;select 1-2 from dual;select 字段一,MAX(字段二)-MIN(字段二) from 表 where 字段一=1 group 字段一 注:1、字段二必须是数值型的,或数据都可转换为数值 2、where条件根据需要加 ...
SQL 同一时间内重复数据只取一条有效数据
select id, name ,date, min(value) from T where value <>''group by id,name ,date
sql中查同一条记录多个时间,取最大值
ORACLE 可以直接函数取 greatest(repdate,repcreatedate,RepAuditTime,printime)mssqlserver可能先列转行求分组最大,没有测试环境,忘记了
sql查询同一个表中id相同的两条数据的时间差
2,STATEDATE)) STAT_TIME FROM (SELECT PHONE,STATEDATE,SALENUM,RANK()OVER(PARTITION BY SALENUM ORDER BY STATEDATE DESC) RN FROM TABLE_NAME)GROUP BY SALENUM )HAVING DATEDIFF(MINUTE,END_TIME,STAT_TIME)< 2 这个应该能够满足,不知道是否有语法错误!好久没用SQL 如果有麻烦你调试下!
SQL语句怎样使查询同一表同一列多条数据分列显示
@sql+', max(case [项目序号] when '''+cast(项目序号 as varchar)+''' then 数额 else 0 end ) AS [项目序号'+cast(项目序号 as varchar)+']'from (select distinct 项目序号 from 表名) as a set @sql = @sql +' from 表名 group by 编码,名称'select @sql exec (@sql)...
简单的SQL语句问题,查询某天的最后一条记录
如果同一时间有多条刻录,那就加上 Top 1 ,在后面再加上 Order By 时间 Desc 如:Select Top * From 表 Where 时间 In( Select Top 1 时间 From 表 Where Convert(varchar,时间,23)='2011-10-25' Order By 时间 Desc) Order By 时间 Desc 把“时间”换成你数据库表中的时间字...
sql问题:相同id情况下,如何按时间逆序取符合条件的第一条数据。
number() over (partiion by ... order by ...)来进行分组编号,然后取分组标号值为1的记录即可。目前主流的数据库都有支持分析函数,很好用。其中,partition by 是指定按哪些字段进行分组,这些字段值相同的记录将在一起编号;order by则是指定在同一组中进行编号时是按照怎样的顺序。