質問から何が必要なのかはっきりしませんが、うまくいけば、次のクエリが役に立ちます:日付部分でグループ化されたレコードの数がinserted_at
になります。
defmodule CountByDateQuery do
import Ecto.Query
@doc "to_char function for formatting datetime as dd MON YYYY"
defmacro to_char(field, format) do
quote do
fragment("to_char(?, ?)", unquote(field), unquote(format))
end
end
@doc "Builds a query with row counts per inserted_at date"
def row_counts_by_date do
from record in SomeTable,
group_by: to_char(record.inserted_at, "dd Mon YYYY"),
select: {to_char(record.inserted_at, "dd Mon YYYY"), count(record.id)}
end
end
使用法:答えを
row_counts_by_date() |> Repo.all() |> Map.new()
%{"05 Aug 2017" => 2}
感謝。それは正しい結果を返しますが、私の要件は、その間にあるデータにdbのデータがない場合、その日付を追加して0としてカウントすることです。 – Ram
'Map.put_new'で不足している値を記入するか、上記のクエリに一連の日付と' left_join'を生成してSQLで行います。例:https://stackoverflow.com/a/14113580/1650580 –
どうもありがとうございました – Ram