【发布时间】:2018-06-11 15:02:24
【问题描述】:
我正在尝试在 15 分钟的步长间隔内选择数据。主要的分组接缝按预期工作,但我在每 15 分钟组内失去秩序。原因是例如: 对于 time_stamp 在 0-14 分钟范围内的 4 个点 -> “floor(EXTRACT(minute FROM time_stamp) / 15) AS Quarter”,将返回值“0”(如预期的那样)。 所以然后 ORDER BY "quarter" 4 带有 "quarter" == "0" 的行,从中选择最后一个值和第一个值。 这导致我无法保证基于时间戳的排序。
SELECT
first(value) as first_value,
last(value) as last_value,
CAST(EXTRACT(year FROM time_stamp) AS INTEGER) AS year,
CAST(EXTRACT(month FROM time_stamp) AS INTEGER) AS month,
CAST(EXTRACT(day FROM time_stamp) AS INTEGER) AS day,
CAST(EXTRACT(hour FROM time_stamp) AS INTEGER) AS hour,
floor(EXTRACT(minute FROM time_stamp) / 15) AS quarter,
FROM
my_table
GROUP BY
year,
month,
day,
hour,
quarter,
ORDER BY
year,
month,
day,
hour,
quarter
下面是表格示例:
CREATE TABLE my_table (
id integer NOT NULL,
time_stamp timestamp without time zone NOT NULL,
value double precision NOT NULL,
);
CREATE SEQUENCE my_table_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE ONLY my_table ALTER COLUMN id SET DEFAULT nextval('my_table_id_seq'::regclass);
ALTER TABLE ONLY my_table
ADD CONSTRAINT my_table_pkey PRIMARY KEY (id);
CREATE INDEX ix_my_table_time_stamp ON my_table USING btree (time_stamp);
我还从查询中删除了“first”和“last”函数,以通知排序确实丢失了。
任何建议如何保持每 15 分钟的排序?
【问题讨论】:
标签: sql postgresql aggregate-functions