项目中用的是PostgreSQL表名:tbl_job:
字段:exectype(执行类型),curentstate(执行状态),starttime(开始时间)需要执行这样的业务:当表中的数据有100条时删除70条,保留的30条中的数据是客户最进操作过的,按开始时间算。
字段:exectype(执行类型),curentstate(执行状态),starttime(开始时间)需要执行这样的业务:当表中的数据有100条时删除70条,保留的30条中的数据是客户最进操作过的,按开始时间算。
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
先查询出来100条数据,然后对这100条数据进行处理:
1.在查询出来的100条数据中过滤出30条数据,这30条数据是最经操作过的(根据starttime判断)
2.保留过滤出的30条,删除其余的70条老的数据就是样的一个sql,希望大家给予解决,谢谢
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();
}
}
如果支持的话,可以创建一个EVENT,然后定时每天的某个时间执行一个存储过程
或者...MYSQL的触发器里不允许对触发条件的表进行操作,如果POSTGRESQL支持的话,就是创建一个插入时触发的触发器,然后
IF (SELECT COUNT(1) FROM TAB)=100 THEN
DELETE FROM TAB ORDER BY TIME LIMIT 70
END IF;