لذا أحاول كتابة استعلام سيحدد مجموعة من الكائنات المميزة في خاصية معينة.
عمل:
+-----+-----------+-----+
| id | timestamp | ... |
+-----+-----------+-----+
| 10 | 16:04 | ... |
| 11 | 16:06 | ... |
| 12 | 16:08 | ... |
| 13 | 16:09 | ... |
| 14 | 16:10 | ... |
+-----+-----------+-----+
FooVersion:
+----+--------+-----------+-------------------+
| id | foo_id | action_id | foo_zab |
+----+--------+-----------+-------------------+
| 1 | 1 | 10 | xx |
| 2 | 2 | 11 | yy |
| 3 | 3 | 12 | zz |
| 4 | 3 | 13 | zy |
| 5 | 3 | 14 | zx |
+----+--------+-----------+-------------------+
فو:
+----+-----+
| id | zab |
+----+-----+
| 1 | xx |
| 2 | yy |
| 3 | zx |
+----+-----+
يتكون المشهد من مجموعة فوس. أحاول تتبع التغييرات في كل فو معينة بمرور الوقت. لذلك ، في كل مرة يتم فيها إجراء تغيير على foo ، يتم تسجيل الإجراء الذي تسبب في هذا التغيير ويتم تخزين نسخة من بعض خصائص foo في foo_versions
الطاولة
إن ما أبحث عنه هو "حالة فوس عند عمل معين". لذا ، في حين أن الإجراء رقم 11 يرتبط على وجه التحديد بـ foo ، فإن حالة المشهد في الإجراء رقم 11 تحتوي بالفعل على 3 فوس ، إصداراتها هي foo_version # 1 و # 2 و # 5
أحتاج إلى إنشاء استعلام يقول "لإجراء محدد ، أعطني تمثيل المشهد"
بالنسبة للعمل رقم 10 ، سيكون المشهد [<foo_version #1>]
بالنسبة للعمل رقم 12 ، سيكون المشهد [<foo_version #1>, <foo_version #2>, <foo_version #3>]
هذا هو المكان الذي تصبح فيه صعبة. بالنسبة للإجراء رقم 14 ، فإن تمثيل المشهد هو [<foo_version #1>, <foo_version #2>, <foo_version #5>]
. إصدارات Foo # 3 و # 4 و # 5 تشير جميعها إلى نفس foo. لذا ، يتم استبدال الإصدارين foo # 3 و # 4 بواسطة # 5.
أنا أستخدم هذا الاستعلام sqlalchemy:
stmt = db.session.query(Action).filter(Action.timestamp <= action.timestamp).subquery()
action_alias = aliased(Action, stmt)
foo_versions = db.session.query(FooVersion) \
.join(Action) \
.join(action_alias, FooVersion.action) \
.filter(Action.frame_id == frame.id) \
.all()
النتيجة التي أحصل عليها
[<foo_version #1>, <foo_version #2>, <foo_version #3>, <foo_version #4>, <foo_version #5>]]]
|____________| |____________|
^ ^
| |
I need to get rid of these versions -> | |
since they have been overwritten