0

数据库模式

我有一个包含以下列的数据库(附截图)

_id = 整数主键

guid = TEXT(图像的唯一 ID)

pubDate = LONG(自纪元以来的时间)

imgsrc = BLOB(图像字节)

要求是我只想保留今天下载的图像。我想删除过时的数据...即昨天的数据。

对于前id = 1考虑guid = 471c9744666b6f51

此图像是在Wed Dec 26 2012 17:11:05下载的,因此数据库应仅包含 12 月 26 日的数据,而不是 12 月 25 日的数据。第一个发布日期不必是今天的日期。因此,可能首先我们需要按 pubdate 以降序对 db 进行排序,然后使用第一个 pubdate 作为输入来删除旧数据。

任何有关如何形成 SQL 语句的帮助将不胜感激。

答:最终做了这样的事情..

long maxDate = 0;

Cursor cursor = getApplicationContext().getContentResolver().query(IMAGES_URI, null, null, null, PUB_DATE + " DESC ");

if (cursor != null && cursor.moveToNext()) {
maxDate = cursor.getLong(cursor.getColumnIndexOrThrow(DatabaseHelper.PUB_DATE));
cursor.close();
}
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(maxDate);
cal.add(Calendar.HOUR, -12);

int delcount = getApplicationContext().getContentResolver().delete(IMAGES_URI, PUB_DATE + " <= " + cal.getTimeInMillis(), null);
4

1 回答 1

3
String sql = "DELETE FROM myTable WHERE pubDate <= date('now','-1 day')"; 
db.execSQL(sql);

编辑:

String sql = "DELETE FROM myTable WHERE pubDate NOT IN (SELECT MAX(pubDate) FROm myTable)"; 
db.execSQL(sql);

编辑:最终版本

DELETE FROM myTable WHERE pubDate NOT IN (SELECT pubdate FROM mytable 
WHERE pubDate < datetime((SELECT MAX(pubDate) FROM myTable),'-1 days'))
于 2012-12-26T12:34:43.067 回答