3-2、于是所有的结果就出来了,对于多列表就有视图5包含合格的行:
(
select * from k  where k.num in (select num from 视图2)
        or k.num in (select num  视图4)
) 这里的k是什么
应该就等于这句吧select * from 视图2 union select * from 视图4

解决方案 »

  1.   

    有必要搞这么复杂吗?
    做一个insert触发器,要插入的记录与最接近的旧有记录差值不大于1,就不插入进来。
      

  2.   

    happydreamer(卖女孩的小火柴) 对的
    但是当时脑袋里是这么想的:如果表有多列,那包含合格行的视图是:
    select * from k  where k.num in (select num from 视图2)
            or k.num in (select num  视图4)
    不小心写了出来 k是表
      

  3.   

    谢谢曾经参与和关注过此贴的朋友。我是最初这个问题的lz。
    本来想等空下来后把这个内容整理一下,可苦于一直没时间。
    现见到realgz (realgz) 已经整理了,在此谢过了。
    有兴趣的朋友可以查看这个帖子:
    http://expert.csdn.net/Expert/topic/2539/2539535.xml?temp=.6932032
    刚开始苦于没有好的答案于是就又把原题抽象一下见下贴。
    http://expert.csdn.net/Expert/topic/2541/2541209.xml?temp=.7224542等一下我把问题的原型写一下!
      

  4.   

    问题来源于食堂刷卡消费系统在实际使用过程中产生的问题:
      由于食堂工人的误操作,常常出现员工吃了一顿饭,却被扣除二次钱的情况。
      体现在数据库中的情况可能就某个人在 10:10:10有一条消费记录,在10:11:10
      也有一条消费记录。而第二条记录很可能就是食堂功能的误操作所产生的。
      (在这里不讨论误操作产生的原因和改进方法,由于系统是别人做的,我需要
       完成一个外挂程序)
      
    现在需要做一个外挂程序完成如下功能。
    问题:
         1、显示出误操作的原始刷卡记录(包括原记录)
         2、每个部门在每台机器上的实际消费总数。
         3、一天内所有实际消费次数大于2次那些人的详细消费记录。。
         
    判断误刷卡的原则:
         1、系统给定一个误操作时间间隔(以一分钟为例) 60s
         2、同一时间点的消费记录只算一次(取ID小的那条记录作为正确操作的记录,其余都属于误操作记录)。
        例:   1 小张   市场部  2003-10-10 10:10:04 消费机A
               2 小张   市场部  2003-10-10 10:10:04 消费机A(属于误操作)
               3 小张   市场部  2003-10-10 10:10:04 消费机A(属于误操作)           
               .......
         3、凡是两条记录的时间差在60S内,取时间最小的那条记录作为正确操作的记录,其余都属于误操作记录。
        例:   5 小张   市场部  2003-10-10 10:10:05 消费机A
               6 小张   市场部  2003-10-10 10:10:28 消费机A(属于误操作)
               ......
         4、如果消费机器是不同的机器,则一定是两条有效的记录
        例:   8 小张   市场部  2003-10-10 10:10:05 消费机A
               9 小张   市场部  2003-10-10 10:10:06 消费机B   
               
    显示要求:
         显示出所有误操作的刷卡记录,包括这些误操作是针对于那一条记录。
     即需要区分出争取记录和误操作记录。
         每个部门在每台机器上的消费总数,是指实际消费的次数,需要除去
     误操作的记录。
         一天内实际消费次数大于二次的的记录,是指某一个人一天内在所有
     机器上实际消费的总次数大于二的人当天的所有消费记录。
     例: 小张在2003-10-10实际消费次数累计为5次,则需要显示小张在
     2003-10-10那天的所有消费记录。
    欢迎继续关注!!
      

  5.   

    那一句就行了:
    delete 
    from tableName A 
    where exists(select 1 
                 from tableName 
                 where id>A.id 
                 and datediff(ss,A.操作时间,操作时间)<=60
                 and 消费机=A.消费机)
      

  6.   


    上面少个ABS:
    delete 
    from tableName A 
    where exists(select 1 
                 from tableName 
                 where id>A.id 
                 and abs(datediff(ss,A.操作时间,操作时间))<=60
                 and 消费机=A.消费机)
      

  7.   

    delete 
    from tableName A 
    where exists(select 1 
                 from tableName 
                 where id>A.id and 卡号=A.卡号
                 and abs(datediff(ss,A.操作时间,操作时间))<=60
                 and 消费机=A.消费机)