1

我无法在我的 Android 应用程序(我正在使用 OrmLite)中组合删除语句。

我有一个充满记录的表。其中两个字段是“dateCreated”(type Date)和“imageSize”(type int)。在我的代码中,我有一个方法free(int size)。这个方法告诉我,我必须从表中删除总“imageSize”<=大小的最旧记录。

例如..我得到参数 1000。每条记录的值可以说是 100。这意味着我必须删除 10 条最旧的记录。

有人可以为我提供最佳的原始 ​​SQL 语句,甚至更好的 OrmLite 代码吗?

我将不胜感激。

4

2 回答 2

1

不幸的是,您不能用一条 SQL 语句来做到这一点。没有办法说

选择记录直到它们的总和小于 X

您可以执行多个查询,直到找到总和小于 X 的最旧记录,但这需要多次单独的 SQL 调用。

我建议选择最后的 X 图像及其大小,然后使用DELETE ... IN .... 这是伪代码:

while (true) {
   SELECT id, imageSize FROM yourtable ORDER BY dateCreated DESC LIMIT 10;
   find the images from the bottom whose sum(imageSize) <= parameter
   delete the found images
   break if you exceed the parameter otherwise loop and get the next 10
}
于 2011-07-07T21:39:31.167 回答
0

尝试这个,

DELETE FROM yourtable WHERE imageSize <= (SELECT SUM(ImageSize) FROM yourtable)

为您的函数使用相同的参数

于 2011-07-06T11:03:11.853 回答