【发布时间】:2021-03-31 07:16:36
【问题描述】:
Table: Invoice
user_id
created_at
目标是找到另一张发票在不到 8 个月的时间内创建的发票,这两张发票都属于同一用户。
示例:
Invoice 2: created_at: 2020-12-01 user_id: 1
Invoice 1: created_at: 2020-08-01 user_id: 1
Invoice 4: created_at: 2020-12-01 user_id: 2
Invoice 3: created_at: 2019-12-01 user_id: 2
Invoice 7: created_at: 2019-09-01 user_id: 3
Invoice 6: created_at: 2019-07-01 user_id: 3
Invoice 5: created_at: 2019-06-01 user_id: 3
查询应返回发票 2,因为在发票 1 之前不到 8 个月内创建了另一张发票(发票 1)。
查询还应返回发票 7,因为在发票 7 之前不到 8 个月内已创建了另一张发票(发票 6)。
查询还应返回发票 6,因为在发票 6 之前不到 8 个月内创建了另一张发票(发票 5)。
到目前为止:
Invoice.where(created_at: 8.months.ago..Time.now).group_by(&:user_id).select { |k, v| v.size > 1 }
select * from invoices where created_at BETWEEN ('2020-04-21 14:05:57.009849' AND '2020-12-21 14:05:57.009949')
我的方法的问题是它只能在过去 8 个月内找到,而不是在一般情况下。而且它使用的是ruby+sql,只有SQL才能更好。
【问题讨论】:
标签: ruby-on-rails ruby postgresql psql