有一个程序日志表,
字段
Open_Datetime(打开窗体,关闭窗体), Form_name(窗体名称), statue(状态)
datatime                             char                 Bit (正常)/异常
我想控制这个日志表的大小.如控制>500条的时候,就自动删除最前入库(Open_datatime,日期字段排序)的
一天所有入库记录,也就是删除 最久入库的那天所有的记录.这个标志(500)我存放在另外一个系统设置表里。Syssetup的 Maxlog字段求SQL语句最优算法谢谢!

解决方案 »

  1.   

    delete from tbl
    where Open_DateTime<
    (select min(Open_Datetime) from 
    (select top 500 * from 
    (select Open_Datetime from tbl orderby Open_Datetime desc) a) b)
      

  2.   

    谢谢blazingfire(烈焰)
    但我还是不太理解if tb1.recon>500 THen
    begin
       Delete from tb1
       Where Open_datetime in (select min(open_datetime) from tb1)
    end else
    //什么都不做。我要的大概就是这个意思, SQL
      

  3.   

    给你解释一下条件就可以了:
    where Open_DateTime<
    (select min(Open_Datetime) from 
    (select top 500 * from 
    (select Open_Datetime from tbl orderby Open_Datetime desc) a) b)
    中:
    select Open_Datetime from tbl orderby Open_Datetime desc
    是把记录以时间降序排列,这样越靠当前时期的时间记录就在前面。
    (select top 500 * from 
    (select Open_Datetime from tbl orderby Open_Datetime desc) a) b)
    取出前最近的前500条记录
    (select min(Open_Datetime) from 
    (select top 500 * from 
    (select Open_Datetime from tbl orderby Open_Datetime desc) a) b)
    取出最近前500条记录中时间最迟的那一个时间
    delete from tbl
    where Open_DateTime<
    (select min(Open_Datetime) from 
    (select top 500 * from 
    (select Open_Datetime from tbl orderby Open_Datetime desc) a) b)
    比最近前500条记录中时间最迟的那一个时间还要迟的记录就删除
      

  4.   

    to  blazingfire(烈焰) 您还没有理解我的意思,select top 500 * from //我不需要列出这个表前500条记录。这个上限500是从另外一个系统设置表里取得的数。也就是说tb1这个表的记录总数不会超过500, 如果超过就会自动删除最先入库的记录(min(open_datetime).
    if tb1.recondcount>500 THen
    begin
       Delete from tb1
       Where Open_datetime in (select min(open_datetime) from tb1)
    end else
    //什么都不做。用SQL怎样写.