【发布时间】:2017-08-15 08:33:25
【问题描述】:
好的,所以我有两张桌子。
locations:
+----+-----------+
| id | name |
+----+-----------+
| 1 | Location1 |
| 2 | Location2 |
| 3 | Location3 |
+----+-----------+
location_ratings
+----+-------------+-----------+--------+
| id | location_id | date | rating |
+----+-------------+-----------+--------+
| 1 | 1 | 4/7/2017 | 1 |
| 2 | 1 | 7/3/2017 | 2 |
| 3 | 1 | 9/9/2017 | 5 |
| 4 | 1 | 11/2/2017 | 4 |
| 5 | 2 | 1/3/2017 | 3 |
| 9 | 2 | 3/7/2017 | 1 |
| 12 | 3 | 2/7/2017 | 2 |
| 13 | 3 | 3/4/2017 | 4 |
| 15 | 3 | 10/1/2017 | 1 |
+----+-------------+-----------+--------+
地点会随机获得评分,并且会一直保持该评分,直到再次评分。尚未评级的位置的评级被视为 0。因此,对于 Location1,它在 2001 年 4 月 7 日之前为 0,然后在 7 月 3 日之前为 1,依此类推。
我需要计算每个月每个评分的位置数,其中该月的位置评分是该月第一天的评分。
所以基本上我想在每个月的第一天找到每个农场的评级。因此,使用上面的示例数据,这将是每个农场在每个月的第一天的评分:
+---------------------+----------+----------+----------+----------+----------+----------+----------+----------+----------+-----------+-----------+-----------+
| Location ID / Month | 1/1/2017 | 2/1/2017 | 3/1/2017 | 4/1/2017 | 5/1/2017 | 6/1/2017 | 7/1/2017 | 8/1/2017 | 9/1/2017 | 10/1/2017 | 11/1/2017 | 12/1/2017 |
+---------------------+----------+----------+----------+----------+----------+----------+----------+----------+----------+-----------+-----------+-----------+
| 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 2 | 2 | 5 | 5 | 5 |
| 2 | 0 | 3 | 3 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 3 | 0 | 0 | 2 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 1 | 1 |
+---------------------+----------+----------+----------+----------+----------+----------+----------+----------+----------+-----------+-----------+-----------+
然后这将是最终结果(每月每个评级的位置数):
+----------------+----------+----------+----------+----------+----------+----------+----------+----------+----------+-----------+-----------+-----------+
| Rating / Month | 1/1/2017 | 2/1/2017 | 3/1/2017 | 4/1/2017 | 5/1/2017 | 6/1/2017 | 7/1/2017 | 8/1/2017 | 9/1/2017 | 10/1/2017 | 11/1/2017 | 12/1/2017 |
+----------------+----------+----------+----------+----------+----------+----------+----------+----------+----------+-----------+-----------+-----------+
| 0 | 3 | 2 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 | 2 | 2 | 2 | 1 | 1 | 1 | 2 | 2 |
| 2 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
| 3 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 4 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
| 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
+----------------+----------+----------+----------+----------+----------+----------+----------+----------+----------+-----------+-----------+-----------+
所以我正在尝试找出获得最终结果的最佳方法。不确定我是否基本上可以在查询中完成所有操作,或者在提取所有数据后是否需要进行一些计算(我正在使用 Postgres 和 Ruby on Rails)。我还应该提到我(最终)需要不仅能做到这一点,而且能做到周、季和年。任何建议将不胜感激,谢谢!
【问题讨论】:
标签: ruby-on-rails postgresql dateinterval