Rails 3.2 Chartkick折线图分组查询显示不正确
Rails 3.2 Chartkick line chart grouped query doesn't display correctly
我正在尝试使用 chartkick 来显示跟踪的多系列折线图
过去一年按月计算的入站和出站总流量 Material。
查询应该生成类似于此的内容:
SELECT SUM(ship_total_net_weight) AS sum_ship_total_net_weight,
month(ship_date) AS month_ship_date, year(ship_date)
AS year_ship_date
FROM [Downstream]
WHERE is_active = 1 AND from_company_id = 89
AND
(ship_date BETWEEN '2014-06-15 18:15:26.196'
AND '2015-06-15 18:15:26.196')
AND (to_company_id <> 89)
GROUP BY month(ship_date), year(ship_date)
order By year(ship_date), month(ship_date)
我的图表踢代码如下:
<%= line_chart [
{name: "Inbound", data: Downstream.where(:to_company_id => current_user.company_id, :ship_date => 1.year.ago..Time.now).where('from_company_id <> ?', current_user.company_id ).group('month(ship_date), year(ship_date)').sum(:ship_total_net_weight)},
{name: "Outbound", data: Downstream.where(:from_company_id => current_user.company_id, :ship_date => 1.year.ago..Time.now ).where('to_company_id <> ?', current_user.company_id ).group('month(ship_date), year(ship_date)').sum(:ship_total_net_weight)}
] %>
我从图表踢得到的结果是每个系列的一条线,只有两个数据点,一个在 2013 年 12 月 31 日,一个在 2014 年 12 月 31 日。
运行 上述 SQL 针对数据库生成 9 个结果,范围从 6/2014 到 2/2015
为什么数据集不同?我的图表踢语法错误吗?我需要以某种方式更改查询吗?
提前感谢您的帮助!
我找到了解决方案,我的查询返回了单独的 date/month 列,所以我需要更改组子句,以下折线图可以正常工作:
<%= line_chart [
{name: "Inbound", data: Downstream.where(:to_company_id => current_user.company_id, :ship_date => 1.year.ago..Time.now).where('from_company_id <> ?', current_user.company_id ).group('dateadd(month, datediff(month,1,ship_date),1)').sum(:ship_total_net_weight)},
{name: "Outbound", data: Downstream.where(:from_company_id => current_user.company_id, :ship_date => 1.year.ago..Time.now ).where('to_company_id <> ?', current_user.company_id ).group('dateadd(month, datediff(month,1,ship_date),1)').sum(:ship_total_net_weight)}
] %>
在组子句中使用 dateadd 和 datediff 函数允许按 month/year 日期或日期时间字段和 returns 单个列中的完整日期进行排序。
- 旁注 - 我使用的 SQLServer 不受 groupdate gem 的支持,它经常与 chartkick 结合使用。
我正在尝试使用 chartkick 来显示跟踪的多系列折线图 过去一年按月计算的入站和出站总流量 Material。
查询应该生成类似于此的内容:
SELECT SUM(ship_total_net_weight) AS sum_ship_total_net_weight,
month(ship_date) AS month_ship_date, year(ship_date)
AS year_ship_date
FROM [Downstream]
WHERE is_active = 1 AND from_company_id = 89
AND
(ship_date BETWEEN '2014-06-15 18:15:26.196'
AND '2015-06-15 18:15:26.196')
AND (to_company_id <> 89)
GROUP BY month(ship_date), year(ship_date)
order By year(ship_date), month(ship_date)
我的图表踢代码如下:
<%= line_chart [
{name: "Inbound", data: Downstream.where(:to_company_id => current_user.company_id, :ship_date => 1.year.ago..Time.now).where('from_company_id <> ?', current_user.company_id ).group('month(ship_date), year(ship_date)').sum(:ship_total_net_weight)},
{name: "Outbound", data: Downstream.where(:from_company_id => current_user.company_id, :ship_date => 1.year.ago..Time.now ).where('to_company_id <> ?', current_user.company_id ).group('month(ship_date), year(ship_date)').sum(:ship_total_net_weight)}
] %>
我从图表踢得到的结果是每个系列的一条线,只有两个数据点,一个在 2013 年 12 月 31 日,一个在 2014 年 12 月 31 日。
运行 上述 SQL 针对数据库生成 9 个结果,范围从 6/2014 到 2/2015
为什么数据集不同?我的图表踢语法错误吗?我需要以某种方式更改查询吗?
提前感谢您的帮助!
我找到了解决方案,我的查询返回了单独的 date/month 列,所以我需要更改组子句,以下折线图可以正常工作:
<%= line_chart [
{name: "Inbound", data: Downstream.where(:to_company_id => current_user.company_id, :ship_date => 1.year.ago..Time.now).where('from_company_id <> ?', current_user.company_id ).group('dateadd(month, datediff(month,1,ship_date),1)').sum(:ship_total_net_weight)},
{name: "Outbound", data: Downstream.where(:from_company_id => current_user.company_id, :ship_date => 1.year.ago..Time.now ).where('to_company_id <> ?', current_user.company_id ).group('dateadd(month, datediff(month,1,ship_date),1)').sum(:ship_total_net_weight)}
] %>
在组子句中使用 dateadd 和 datediff 函数允许按 month/year 日期或日期时间字段和 returns 单个列中的完整日期进行排序。
- 旁注 - 我使用的 SQLServer 不受 groupdate gem 的支持,它经常与 chartkick 结合使用。