我正在使用 PostgreSQL,我正在尝试创建数据视图:
forecast_datetime, file_date, thing_id, thing_name, facts...
forecast_datetime 列是每 30 分钟间隔的日期时间。问题是预测是未来 1 个月,这会导致大量重复数据。(所以今天,将会有 2016-12-25 01:30:00 的预测,然后明天会有相同间隔的预测,可能会一遍又一遍地进行,直到该时期实际发生。)。
我要创建的视图只是查看附加到表中的最后一个预测。这由 file_date 列指示(顾名思义,我收到一个附加到数据库的每日预测文件。此列指示文件名中的日期)。
我基本上想过滤每个thing_id 的所有行并选择forecast_datetime 列,其中file_date 是该预测的最大日期。所以每个 thing_id 应该只有一行,每个唯一的 forecast_datetime 间隔基于最新的 file_date。
CREATE OR REPLACE VIEW schema.view AS
SELECT DISTINCT ON (thing_id, forecast_datetime, file_date)
forecast_datetime,
interval,
time_zone,
file_date,
thing_id,
thing_name,
other_cols...
FROM schema.orig_table
ORDER BY file_date DESC
该查询会起作用吗?我可以在 pandas/python 中轻松做到这一点,但我对 SQL 比较陌生,想尝试一个视图而不是编写一个新的物理表。
这是应用我在上面写的查询后的一些示例数据。因为我在 SELECT DISTINCT 查询中包含了 file_date,所以仍然有一个重复行重复每个 forecast_datetime。当我将基于 thing_id 和 forecast_datetime 的数据加入到实际结果表中时,这会导致问题。
forecast_datetime file_date thing_id
2016-12-12 20:30 2016-12-11 99
2016-12-12 20:30 2016-12-10 99
2016-12-12 20:30 2016-12-09 99
2016-12-12 20:30 2016-12-08 99
我只想拥有最大 file_date 的行。在上面的示例中,这将是第一行 (2016-12-11)。其他行将从视图中删除。
这似乎工作得很好。