我有这种表:
dated category_id policy_id available
2016-01-01 1 1 5
2016-01-01 1 2 5
2016-01-01 2 1 2
2016-01-02 1 1 4
2016-01-03 1 1 3
2016-01-03 2 1 3
2016-01-03 2 2 3
我想显示每个日期的可用性(每个类别已添加),与策略无关。在这种情况下的结果应该是:
2016-01-01 => 7
2016-01-02 => 4
2016-01-03 => 6
我正在使用 groupdate gem,允许这样的查询:
Item.group_by_day(:dated).sum(:available)
此查询当然会在第一个日期返回 12 (应为 7 ), 9 (应为 6 )为最后一个。
如何只使用一个日期/类别组合?我尝试了.uniq(:category_id)
,但这似乎不起作用。
感谢您的帮助!
答案 0 :(得分:1)
我建议这个数据库子查询...
subquery = Item.select('DISTINCT ON(items.dated, items.category_id) items.id').order(:dated, :category_id).to_sql
...然后像这样使用Rails group_by
available_by_date = items
.where("items.id in (#{subquery})")
.group_by_day(:dated)
.sum(:available)
答案 1 :(得分:0)
嗯,你必须找出你想要的值。我可以推测它是其中之一:
Item.group_by_day(:available).average(:available)
Item.group_by_day(:available).max(:available)
答案 2 :(得分:0)
你可以试试这个。
Item.group(["dated", "category_id"]).sum(:available)