Для следующего запроса:Ecto.QueryError на подзапроса
sub_query = from sq in Database.Nestoria,
distinct: sq.lister_url,
select: [sq.place_name,
sq.price,
sq.price_type],
where: fragment("cast(to_char(?, 'YYYYMMDD') AS INTEGER) >= (SELECT cast(to_char(max(inserted_at), 'YYYYMMDD') AS INTEGER) - 1 FROM nestoria)", sq.inserted_at),
where: sq.bedroom_number == 1
query = from un in Database.Underground,
left_join: ne in subquery(sub_query), on: un.station_name_slug == ne.place_name,
select: [ un.lines_id,
un.station_name,
un.display_name,
ne.place_name,
fragment("count(?) as data_count", ne.place_name),
fragment("Avg(CASE WHEN ? = 'weekly' THEN price * (31/7) ELSE price END) AS avg_monthly_price ", ne.price_type)],
group_by: [un.lines_id,
un.station_name,
un.display_name,
ne.place_name],
order_by: [ne.place_name]
output = Repo.all(query)
Я получаю ошибку ниже:
** (Ecto.QueryError) subquery must select a source (t), a field (t.field) or a map, got: [&0.place_name(), &0.price(), &0.price_type()]
Странная вещь У меня есть это работает в очень похожий проект без проблем. Все схемы работают правильно без каких-либо проблем (Repo.all (Nestoria/Underground) возвращает штраф).
Попробуйте 'select: [: place_name,: price,: price_t ype] 'вместо' select: [sq.place_name, ...] '. – Dogbert
Это исправление очень понравилось. Как получается, что оригинальный способ не сработал? – clery00