2015-08-27 2 views
0

У меня есть список id s, соответствующий запросам клиента.Проблема Создание запроса SQLAlchemy

У меня есть 2 таблицы, представляющие интерес:

**Request** 
id 
time_of_creation 

и

**Reply** 
id 
request_id (foreign key to `id` in request) 
timestamp 

Каждый запрос может иметь несколько ответов. Мне нужен список разницы во времени между каждым запросом и самым ранним ответом.

В настоящее время я

reply_table = aliased(Reply, name='ReplyTable') 
request_table = aliased(Request, name='RequestTable') 
s = (cls.session.query(func.min(reply_table.timestamp).label('timestamp')). 
     join(request_table). 
     filter(request_table.id.in_(requests))) 
query = (cls.session.query(Reply.timestamp, Request.time_of_creation). 
      filter(
       Reply.timestamp.in_(s), 
       Request.id.in_(requests) 
      ).join(Request)) 
return query.all() 

где requests может выглядеть примерно так [1, 100, 200, .. 3].

К сожалению, этим результатом является только одно значение. Это правильный способ вложить 2 запроса, чтобы вернуть список timestamp и time_of_creation пар, чтобы я мог учитывать разницу во времени каждой пары в результирующем списке?

ответ

0

Вы получаете только один результат, потому что вам не хватает group_by в подзапросе s, таким образом вы получаете глобальный минимум. Это должно быть что-то подобное,

s = (session.query(func.min(Reply.timestamp).label('timestamp')) 
     .join(Request) 
     .filter(Request.id.in_(requests)) 
     .group_by(Request.id)) 

(я не использовал псевдонимы в моих испытаниях.)

Надеется, что это помогает.

Смежные вопросы