【发布时间】:2015-10-24 18:56:07
【问题描述】:
这是数据库布局。我有一张桌子,随着时间的推移,销售额很少,每天汇总。如果我在 2015 年 1 月 1 日有 10 次销售,我将有一个条目,但如果我有 0,那么我没有条目。像这样。
|--------------------------------------|
| day_of_year | year | sales | item_id |
|--------------------------------------|
| 01 | 2015 | 20 | A1 |
| 01 | 2015 | 11 | A2 |
| 07 | 2015 | 09 | A1 |
| ... | ... | ... | ... |
|--------------------------------------|
这就是我获得 1 个项目的时间序列的方式。
SELECT doy, max(sales) FROM (
SELECT day_of_year AS doy,
sales AS sales
FROM myschema.entry_daily
WHERE item_id = theNameOfmyItem
AND year = 2015
AND day_of_year < 150
UNION
SELECT doy AS doy,
0 AS sales
FROM generate_series(1, 149) AS doy) as t
GROUP BY doy
ORDER BY doy;
我目前循环使用 R 对每个项目进行 1 次查询。然后我将结果汇总到一个数据框中。但这非常慢。实际上,我希望只有一个查询可以聚合以下形式的所有数据。
|----------------------------------------------|
| item_id | 01 | 02 | 03 | 04 | 05 | ... | 149 |
|----------------------------------------------|
| A1 | 10 | 00 | 00 | 05 | 12 | ... | 11 |
| A2 | 11 | 00 | 30 | 01 | 15 | ... | 09 |
| A3 | 20 | 00 | 00 | 05 | 17 | ... | 20 |
| ... |
|----------------------------------------------|
这可能吗?顺便说一句,我使用的是 Postgres 数据库。
【问题讨论】:
标签: sql r postgresql