0
Я пытаюсь запустить этот запрос:Ecto объявить схему для запроса
select last_sd.*
from
(select distinct(sensor_id) from sensor_data) s LEFT JOIN LATERAL
(select * from sensor_data sd1 where sd1.sensor_id = s.sensor_id order by sd1.received_at desc limit 1) last_sd ON true
ближайший я получил это:
from s in IotInABox.SensorData, distinct: true, select: s.sensor_id
|> join(:left_lateral, [s], sd in fragment("select * from sensor_data sd1 where sd1.sensor_id = ? order by sd1.received_at desc limit 1", s.sensor_id))
|> select([s, sd], sd)
это, однако, работает частично, так как он бросает
PostgreSQL requires a schema module when using selector "f1" but none was given. Please specify a schema or specify exactly which fields from "f1" you desire in query
означает, что, поскольку у меня нет from s in SensorData
, он не знает, какую модель ecto использовать,
есть способ сказать ecto, какую схему использовать в качестве результата запроса?
Да я прочитал это решение в другом ответе, но я хотел бы просто объявить схема, теперь я мог бы просто снова присоединиться к схеме, но это повлияет на производительность. – alex88
Я сомневаюсь, есть ли другой способ, чем «из s в SensorData» для объявления схемы – amatalai
@ alex88, возможно, вам стоит попробовать Ecto.Adapters.SQL.query с вашим сырым sql, а затем конвертировать% Postgrex.Result {} в то, что вы хотите – amatalai