GoogleAppEngineデータストアに2つのデータセットがあります。
class First_Set(db.Model):
start_time = db.DateTimeProperty()
end_time = db.DateTimeProperty()
data1 = db.FloatProperty()
...
class Second_Set(db.Model):
start_time = db.DateTimeProperty()
end_time = db.DateTimeProperty()
data2 = db.FloatProperty()
...
(他にも異なるデータがあるため、異なるデータセットに含まれています。)
理想的には、一方から結果を取得して最初の結果をもう一方から繰り返すことなく、2つのデータセット間で重複するすべてのstart_timeとend_timeのデータストアIDを見つけたいと思います。
初期データセットの優れた視覚化はここからです(SQLでも問題が解決されています)。
1 |-----|
2 |-----|
3 |--|
4 |-----|
5 |-----|
6 |---|
7 |---|
8 |---|
9 |-----|
私が必要とする最終結果は、(同じ例から)次のように調整されたものです。
+----+---------------------+----+---------------------+
| id | start | id | end |
+----+---------------------+----+---------------------+
| 2 | 2008-09-01 15:02:00 | 1 | 2008-09-01 15:04:00 |
| 5 | 2008-09-01 16:19:00 | 4 | 2008-09-01 16:23:00 |
| 8 | 2008-09-01 16:20:00 | 4 | 2008-09-01 16:22:00 |
| 8 | 2008-09-01 16:20:00 | 5 | 2008-09-01 16:22:00 |
| 7 | 2008-09-01 18:18:00 | 9 | 2008-09-01 18:22:00 |
+----+---------------------+----+---------------------+
SQLソリューションは以下の例で説明されていますが、JOINがないため、データストアでこれを行うことができませんでした。
SELECT v1.id, v1.start, v2.id, LEAST(v1.end,v2.end) AS end
FROM visits v1
JOIN visits v2 ON v1.id <> v2.id and v1.start >= v2.start and v1.start < v2.end
ORDER BY v1.start;
これの1対多バージョンは、ListProperty()を使用するとかなり簡単であることを理解しています(この質問から)。
重複する時間を見つけるための解決策を誰かが考えることができますか(理想的にはPythonで)?