项目中用的是PostgreSQL表名:tbl_job:
字段:exectype(执行类型),curentstate(执行状态),starttime(开始时间)需要执行这样的业务:当表中的数据有100条时删除70条,保留的30条中的数据是客户最进操作过的,按开始时间算。

解决方案 »

  1.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  2.   

    对不起,我没描述清楚
    先查询出来100条数据,然后对这100条数据进行处理:
    1.在查询出来的100条数据中过滤出30条数据,这30条数据是最经操作过的(根据starttime判断)
    2.保留过滤出的30条,删除其余的70条老的数据就是样的一个sql,希望大家给予解决,谢谢
      

  3.   

    delete from tb where starttime<'xxx'
      

  4.   

    public static void CreateCsvfiles(String targetPath, String filename,
    String title[], List<JobBean> list) throws Exception {
    File file = null;
    OutputStream out = null;
    PrintWriter pw = null;
    try {
    file = new File(targetPath + filename + ".csv");
    out = new FileOutputStream(file);
    pw = new PrintWriter(out);
    for (int j = 0; j < title.length; j++) {
    pw.append(title[j] + ",");
    }
    for (int i = 0; i < list.size(); i++) {
    String operationname = (list.get(i).getPaerationname());
    String operationresult = (list.get(i).getOperationresult());
    String username = (list.get(i).getUsername());
    String userip = (list.get(i).getUserip());
    String operationtime = (list.get(i).getOperationtime());
    String operationdetail = (list.get(i).getOperationdetail());
    pw.append("\n");
    pw.append(operationname + ",");
    pw.append(operationresult + ",");
    pw.append(username + ",");
    pw.append(userip + ",");
    pw.append(operationtime + ",");
    pw.append(operationdetail + ",");
    }
    } catch (Exception e) {
    // TODO: handle exception
    } finally {
    pw.flush();
    out.flush();
    out.close();
    }
    } public static void main(String[] args) throws IOException {
    try {
    String path = "e://789/";
    Date df = new Date();
    SimpleDateFormat sm = new SimpleDateFormat("yyyyMMddHHmmss");
    String filename = "job_dump_" + sm.format(df);
    System.out.println(filename);
    String title[] = { "操作名称", "操作结果", "用户名", "用户IP", "操作时间", "详细信息" };
    List<JobBean> list = new ArrayList<JobBean>();
    for (int i = 0; i < 5; i++) {
    JobBean job = new JobBean();
    job.setPaerationname("备份静态数据");
    job.setOperationresult("成功");
    job.setUsername("admin");
    job.setOperationtime("20101-11-11 11:11:11");
    job.setOperationdetail("备份单板");
    job.setUserip("10.71.138.167");
    list.add(job);
    }
    CSV.CreateCsvfiles(path, filename, title, list);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
      

  5.   

    不知道POSTGRESQL支持不支持EVENT事件调度器
    如果支持的话,可以创建一个EVENT,然后定时每天的某个时间执行一个存储过程
    或者...MYSQL的触发器里不允许对触发条件的表进行操作,如果POSTGRESQL支持的话,就是创建一个插入时触发的触发器,然后
    IF (SELECT COUNT(1) FROM TAB)=100 THEN
      DELETE FROM TAB ORDER BY TIME LIMIT 70
    END IF;
      

  6.   

    问题解决了delete form tab_job where starttime in (select starttime form tab_job order by starttime limit 70)根据时间进行排序,默认是升序,所以找出前70条数据(这样后面三十条数据是最经操作过的),然后在delete此70条,留下的就是最新的30条数据。