elixir - 如何编写在日期时间字段上执行 group_by MONTH 的 Ecto 查询

标签 elixir phoenix-framework ecto

我正在做一个 ecto 查询并试图按 q.created_date 分组.这个查询成功地执行了 GROUP BY,但它在第二次执行。我正在尝试按月分组。

MYQUERY |> group_by([q], [q.created_date, q.id])

有没有类似的东西:
MYQUERY |> group_by([q], [month(q.created_date), q.id])

最佳答案

您可以使用 fragment date_part('month', field) 在 PostgreSQL 中提取月份:fragment("date_part('month', ?)", p.inserted_at))

iex(1)> from(Post) |> select([p], p.inserted_at) |> Repo.all
[debug] QUERY OK db=1.1ms queue=0.1ms
SELECT p0."inserted_at" FROM "posts" AS p0 []
[#Ecto.DateTime<2000-01-01 00:00:00>, #Ecto.DateTime<2000-02-02 00:00:00>,
 #Ecto.DateTime<2000-03-03 00:00:00>, #Ecto.DateTime<2000-04-04 00:00:00>,
 #Ecto.DateTime<2000-04-02 00:00:00>, #Ecto.DateTime<2000-03-02 00:00:00>,
 #Ecto.DateTime<2000-02-02 00:00:00>, #Ecto.DateTime<2000-01-02 00:00:00>]
iex(2)> from(Post) |> group_by([p], fragment("date_part('month', ?)", p.inserted_at)) |> select([p], count("*")) |> Repo.all
[debug] QUERY OK db=1.7ms
SELECT count('*') FROM "posts" AS p0 GROUP BY date_part('month', p0."inserted_at") []
[2, 2, 2, 2]

关于elixir - 如何编写在日期时间字段上执行 group_by MONTH 的 Ecto 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38648371/

相关文章:

elixir - 如何执行与 Ecto 等效的 ActiveRecord 查询 current_user.articles?

elixir - 在 Phoenix 中处理嵌套表单/ecto 变更集的正确方法是什么?

postgresql - 适配器 Ecto.Adapters.Postgres 未编译

elixir - 使一个字段在 ecto 中独一无二

erlang - 使用 Elixir Genstage 的运行时动态计算图

string - 从Elixir中的字符串获取子字符串

elixir - 如何检查 Elixir 列表或元组中是否存在某个项目?

elixir - 尝试在 Phoenix 中发送 HTTP 状态代码时出错

postgresql - Phoenix/Elixir - 时间戳不存在,扩展为 timestamps()

elixir - Phoenix 框架和传递连接