これは単純なはずですが、私には理解できないようです。
これが私のテーブルです:
class UserEvent(Base):
__tablename__ = 'user_events'
user_id = Column(Integer, ForeignKey('users.user_id'),
primary_key=True, nullable=False)
event_time = Column(DateTime, primary_key=True, nullable=False)
detect_time = Column(DateTime, nullable=False)
new_state = Column(Boolean, nullable=False)
そして、ここにいくつかのサンプルデータがあります:
+---------+---------------------+---------------------+-----------+
| user_id | event_time | detect_time | new_state |
+---------+---------------------+---------------------+-----------+
| 1 | 2012-11-12 16:12:00 | 2013-01-31 20:55:31 | 1 |
| 1 | 2012-11-12 18:24:00 | 2013-01-31 20:55:33 | 0 |
+---------+---------------------+---------------------+-----------+
各user_idの最新(event_time)UserEventを見つけたい。
私はこれを試しました:
for event, current in session.query(
UserEvent, func.max(UserEvent.event_time)).group_by(
UserEvent.user_id):
クエリは正しい「イベント」(2012-11-12 18:24:00)を返します。ただし、「current」がTrueであるため、JOINEDが正しくありません(または何か)。
テーブル内の行数に関係なく、常に最新のevent_timeとOLDESTnew_stateを取得します。