问题描述
我正在尝试按规范化日期对记录进行分组。该查询在 sql 中有效,但我无法将其转换为 Ecto。到目前为止,我有:
Invoice
|> where([i],i.club_id == ^id)
|> group_by(
[i],fragment(
"CASE WHEN EXTRACT(DAY FROM ?) < 25 THEN to_char(?,'YYYY-MM')
ELSE to_char((? + interval '1' month),'YYYY-MM') END",i.date,i.date
)
)
|> order_by(
[i],desc:
fragment(
"CASE WHEN EXTRACT(DAY FROM ?) < 25 THEN to_char(?,'YYYY-MM')
ELSE to_char((? + interval '1' month),i.date
)
)
|> select([i],[
sum(i.gross_amount),sum(i.amount_paid),count(i.payer_id)
])
|> Repo.paginate(params)
这给了我错误:
expected at most one result but got 13 in query:
from i0 in kurabuApp.Admin.Invoices.Invoice,where: i0.club_id == ^"123",group_by: [fragment("CASE WHEN EXTRACT(DAY FROM ?) < 25 THEN to_char(?,'YYYY-MM')\n ELSE to_char((? + interval '1' month),i0.date,i0.date)],select: count("*")
我尝试的另一种方法是:
Invoice
|> where([i],i.club_id == ^id)
|> select([i],[
fragment(
"CASE WHEN EXTRACT(DAY FROM ?) < 25 THEN to_char(?,'YYYY-MM') END AS grp_date",i.date
),sum(i.gross_amount),count(i.payer_id)
])
|> group_by([i],fragment("grp_date"))
|> order_by(desc: fragment("grp_date"))
|> Repo.paginate(params)
结果:
ERROR 42703 (undefined_column) column "grp_date" does not exist
select
CASE WHEN EXTRACT(DAY FROM date) < 25 THEN to_char(date,'YYYY-MM')
ELSE to_char((date + interval '1' month),'YYYY-MM') END
AS grp_date,sum(gross_amount),sum(amount_paid),count(payer_id)
from invoices
where club_id = '123'
group by grp_date
order by grp_date desc;
这里出了什么问题。绑定不知何故似乎不起作用,我无权访问 grp_date
。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)