sql - 尝试使用 DISTINCT 和 GROUP BY 失败

标签 sql ruby-on-rails arel

我在处理一些我认为很简单的事情时遇到了麻烦...

我有一个简单的模型 Statistic,它存储一个日期 (created_at)、一个 user_fingerprint 和一个 structure_id .由此,我想创建一个图表来显示每天的#visitors。

我也是这样

@structure.statistics.order('DATE(created_at) ASC').group('DATE(created_at)').count 

哪个有效并返回我期望的:

=> {Sat, 18 May 2014=>50, Mon, 19 May 2014=>90}

现在我想要相同的,但我想用相同的一对(created_atuser_fingerprint)压缩所有行。例如:

|     created_at       | user_fingerprint | structure_id |
|----------------------|------------------|--------------|
| Sat, 18 May 2014 2PM |    '124512341'   |     12       |
| Sat, 18 May 2014 4PM |    '124512341'   |     12       |
| Mon, 19 May 2014 6PM |    '124512341'   |     12       |

有了这些数据,我会:

=> {Sat, 18 May 2014=>1, Mon, 19 May 2014=>1}
# instead of
=> {Sat, 18 May 2014=>2, Mon, 19 May 2014=>1}

我可以用 Ruby 来做,但我想知道我是否可以直接用 SQL 和 Arel 来做。

关于你的答案的解决方案

这是我最后做的:

@impressions = {}
# The following is to ensure I will have a key when there is no stat for a day.
(15.days.ago.to_date..Date.today).each { |date| @impressions[date] = 0 }

@structure.statistics.where( Statistic.arel_table[:created_at].gt(Date.today - 15.days) )
                     .order('DATE(created_at) ASC')
                     .group('DATE(created_at)')
                     .select('DATE(created_at) as created_at, COUNT(DISTINCT(user_fingerprint)) as user_count')
                     .each{ |stat| @impressions[stat.created_at] = stat.user_count }

虽然我需要做一些 Ruby,但这对我有好处。

最佳答案

您的查询看起来像(Oracle 方言)

select trunc(created_at), user_fingerprint, count(distinct user_fingerprint)
from statistic
group by trunc(created_at), user_fingerprint 

没有用于从日期时间数据字段中获取日期部分的 SQL 标准。

甲骨文:截断(dt_column) sql server: cast(dt_column As Date) mysql: 日期(dt_column)

关于sql - 尝试使用 DISTINCT 和 GROUP BY 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23740534/

相关文章:

mysql - SUM(MAX( ) + MAX( )) 怎么做?

sql - .NET DataGridView 将 1899-12-30 显示为仅时间值的一部分

ruby-on-rails - 升级到 Rails 4.2 会中断 Delayed::Job:加载作业失败:未定义的方法 'fetch_value'

ruby-on-rails - 设置 Rails 验证。以一种形式使用两种模型

sql - rails : batched attribute queries using AREL

php - mysql 事件调度程序每天上午 8 点安排事件

mysql - 关于嵌套select的sql问题

ruby-on-rails - json post 来设计原因 422/不可处理的实体

ruby-on-rails - 有没有一种特别优雅的方法来使用 Rails 3/Arel 进行计数查询?

ruby-on-rails - 你如何使用 ARel 的#as 方法?