gpt4 book ai didi

postgresql - 如何在 INSERT 查询中使用 WHERE BETWEEN 子句?

转载 作者:行者123 更新时间:2023-11-29 14:10:32 24 4
gpt4 key购买 nike

我有下表。

CREATE TABLE public.ad
(
id integer NOT NULL DEFAULT nextval('ad_id_seq'::regclass),
uuid uuid NOT NULL DEFAULT uuid_generate_v4(),
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL,
cmdb_id integer,
platform character varying(100),
bidfloor numeric(15,6),
views integer NOT NULL DEFAULT 1,
year integer,
month integer,
day integer,
CONSTRAINT ad_pkey PRIMARY KEY (id),
CONSTRAINT ad_cmdb_id_foreign FOREIGN KEY (cmdb_id)
REFERENCES public.cmdb (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT ad_id_unique UNIQUE (uuid)
)
WITH (
OIDS=FALSE
);

无需详细说明,此表记录了全国电子屏幕上广告的所有请求和印象。该表还用于生成报告,由 +- 5000 万条记录组成。

目前,报告是根据 created_at 时间戳过滤的。您可以想象,如果有 +- 5000 万条记录,查询会变慢,即使在 created_at 列上有索引也是如此。通过选择您希望在系统用户界面上请求数据的日期来生成报告。

年、月和日列是我刚刚添加的新列,目的是提高报告效率。我希望系统不按日期编制索引,而是按年、月和日编制索引,所有单独的值。

新添加的列仍然是空的。我想运行一个查询,在 created_at 列位于两个日期之间的位置插入一个值。例如:

INSERT INTO ad (year) VALUES (2016) WHERE created_at BETWEEN '2016-01-01 00:00:00' AND '2016-12-31 23:59:59';

这当然行不通。我似乎无法在 Internet 上找到任何 INSERT 语句使用 WHERE BETWEEN 子句的内容。我还尝试使用子查询和 WITH 子句使用 generate_series 生成 2012 年到 2020 年之间的一系列年份。这一切都没有成功。

最佳答案

你不想插入新行,你应该更新你的表。

UPDATE table_name
SET column1=value1,column2=value2,...
WHERE column_name BETWEEN value1 AND value2;

否则你将有 1 亿行 ;)

关于postgresql - 如何在 INSERT 查询中使用 WHERE BETWEEN 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37616083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com