尋找一種方法來獲取每個月為表創建的所有記錄
例如,我需要知道如何獲得如下結果:
January: 6,
Feb: 9,
March: 10
理想情況下,我正在考慮使用created_at資料庫中的欄位進行比較。
uj5u.com熱心網友回復:
您可以在 SQL 中使用GROUP BYand COUNTfrom 來有效地檢索資料。Rails 在這里提供了各種選項來構建 SQL 查詢,該查詢使用ActiveRecord::Calculations.
假設您有一個Record為您的記錄命名的模型并且您使用 MySQL / MariaDB 作為您的資料庫,這可用于獲取每月的記錄數:
records_per_month = Record.group('EXTRACT(YEAR_MONTH FROM created_at)').count
這將回傳整數的哈希值(對應于組的年份和月份,以便例如 2022 年 5 月的記錄將分組在 key 下202205)和本月內的記錄數作為值。
從您的示例中,這將是
{
202201 => 6,
202202 => 9,
202203 => 10
}
如果需要,您可以進一步“格式化”密鑰,例如
records_per_month.transform_keys! do |year_month|
Date.strptime(year_month.to_s, '%Y%m').strftime('%B %Y')
end
在這里,我們將年月整數決議為日期,Date.strptime并格式化日期Date#strftime以顯示月份名稱和年份,例如"February 2022"。
uj5u.com熱心網友回復:
假設您有一個 Users 表(我的 Rails 應用程式有一個),如下所示:
id
name
.
.
.
created_at
updated_at
您可以使用此代碼,它將回傳帶有計數的月份哈希:
users = User.all
users.group_by {|u| u.created_at.strftime("%B")}.transform_values {|v| v.count}
回傳類似:
{"September"=>33,
"August"=>1,
"October"=>1,
"February"=>55,
"January"=>185,
"May"=>4,
"December"=>145,
"June"=>8,
"November"=>19,
"March"=>51,
"April"=>27,
"July"=>5}
解釋
created_at.strftime("%B")
這會將日期轉換為月份,使用strftime
users.group_by {|u| u.created_at.strftime("%B")}
使用group_by創建按月份名稱對用戶記錄進行分組的哈希
.transform_values {|v| v.count}
我們只需要計數,而不是記錄集合。我們將key單獨留在散列中,并使用transform_values來計算values.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/482603.html
