2017-08-05 15 views
-2

inserted_at列を使用して、行を日/週/月単位でグループ化します。
例:最初の行が1週間前に作成されてから日単位でグループ化され、中間の日付にデータが作成されない場合は、oを値として追加します。Elixirの日付までの日/週/月単位のグループ化

[ 
{"21 Jul" => 12},{"22 Jul" => 0},{"23 Jul" => 3}, {"24 Jul" => 1}... 
{"5 Aug" => 0} 
] 

ありがとうございます。

答えて

0

質問から何が必要なのかはっきりしませんが、うまくいけば、次のクエリが役に立ちます:日付部分でグループ化されたレコードの数が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} 
+0

感謝。それは正しい結果を返しますが、私の要件は、その間にあるデータにdbのデータがない場合、その日付を追加して0としてカウントすることです。 – Ram

+0

'Map.put_new'で不足している値を記入するか、上記のクエリに一連の日付と' left_join'を生成してSQLで行います。例:https://stackoverflow.com/a/14113580/1650580 –

+0

どうもありがとうございました – Ram

関連する問題