java - 组合键上的 Sqlite 相对补集

标签 java sqlite ormlite

首先一些关于我的问题的背景:
我正在构建一个爬虫,我想监控一些高分列表。
高分列表由两个参数定义:类别和集合(共同唯一)。
成功下载后,我创建一个新的统计条目(类别、集合、createdAt,...)

问题:我只想每天查询一次高分列表。所以我需要一个查询来返回 24 小时内未下载的类别和集合。 为此应使用统计表。
我有一个所有可能的类别和所有可能的集合的列表。它们的工作方式类似于交叉连接。 所以基本上我需要交叉连接与过去 24 小时的条目的相对补充

我的想法:交叉连接类别和集合,并“减去”过去 24 小时内创建的所有统计条目对(类别、集合)

问题 1:是否可以在查询中定义类别和集合并交叉连接它们,还是必须为它们创建一个表?

问题 2:我的想法是正确的方法吗?您将如何在 Sqlite 中执行此操作?

好吧,我意识到这可能听起来很困惑,所以我画了一张我真正想要的图像。 enter image description here

我对 C 感兴趣。

这是我当前的java代码,也许有助于理解问题:

public List<Pair<String, String>> getCollectionsToDownload() throws SQLException {
  long threshold = System.currentTimeMillis() - DAY;
  QueryBuilder<TopAppStatistics, Long> query = queryBuilder();
  List<TopAppStatistics> collectionsNotToQuery = query.where().ge(TopAppStatistics.CREATED_AT, threshold).query();

  List<Pair<String, String>> toDownload = crossJoin();
  for (TopAppStatistics stat : collectionsNotToQuery) {
    toDownload.remove(new Pair<>(stat.getCategory(), stat.getCollection()));
  }
  return toDownload;
}

private List<Pair<String, String>> crossJoin() {
  String[] categories = PlayUrls.CATEGORIES;
  String[] collections = PlayUrls.COLLECTIONS;
  List<Pair<String, String>> toDownload = new ArrayList<>();
  for (String ca : categories) {
    for (String co : collections) {
      toDownload.add(new Pair<>(ca, co));
    }
  }
  return toDownload;
}

最佳答案

解决您的问题的最简单的方法是异常(exception)。假设你有一个子查询 一个计算 A,另一个计算 B。这些查询 可能非常复杂。关键是两者都应返回相同数量的列和可比较的数据类型。

在 SQLite 中你可以这样做:

<your subquery 1> EXCEPT <your subquery 2>

就这么简单。

例如:

SELECT a, b FROM T where a > 10 
EXCEPT 
SELECT a,b FROM T where b < 5;

请记住,两个子查询必须返回相同的列数。

关于java - 组合键上的 Sqlite 相对补集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40323408/

相关文章:

android - 无法在 Eclipse 的 SQLite 管理器插件中打开数据库文件?

Android ORMLite - ForeignCollection 子项具有空的外部字段

java - 为什么 fork join 任务在公共(public) fork join 池线程之外执行?

Java版本问题

java - 为什么不能将 android.os.build.VERSION 解析为变量?

android - 这种从sqlite获取数据的方式正确吗?

iphone - 如何将数组插入到 SQLite 数据库中?

java - RoboSpice 使用 OrmLite 持久化 JSON 数组

java - 如何在ormlite中保存带有 'foreign object'的对象

java - 为什么 (boolean ^ int > 0) 有效?