最初に私の問題に関する背景:
私はクローラを構築しており、いくつかの最高得点リストを監視したいと思います。
ハイスコアリストは、カテゴリとコレクション(一緒に一意)の2つのパラメータで定義されます。
新しい統計情報エントリ(カテゴリ、コレクション、createdAt、...)を作成します。結合キーのSqlite相対補完
問題:ハイスコアリストを1日に1回しか照会しません。ですから、24時間以内にダウンロードされていないカテゴリとコレクションを返すクエリが必要です。 これには統計表を使用する必要があります。
私はすべての可能なカテゴリとすべての可能なコレクションのリストを持っています。クロスジョインのように機能します。 基本的に私は、過去24時間のエントリとのクロスジョイントの相対的な補完が必要です
私の考え:クロス結合のカテゴリとコレクションは、作成中に作成されたすべてのペア(カテゴリ、コレクション)最後24時間
質問1:クエリ内でカテゴリとコレクションを定義してクロス結合することはできますか、それともそのためのテーブルを作成する必要がありますか?
質問2:私のアイデアは正しいアプローチですか?どのようにSqliteでこれを行いますか?
私は実際に欲しいもののイメージを描いたので、これは混乱するかもしれないことを理解します。
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;
}