标签: query

如何更改 Postgres 主键列值?

我的 postgres 数据库有一个名为“id”的列,其范围从 40,000,000 到大约 50,000,000。“id”列是主键。我需要更改“id”列值,使它们跨越不同的数字,以便将此数据库与另一个数据库合并。

我如何生成代码以将值从 40,000,000 - 50,000,000 更改为 0 - 10,000,000?

表的定义是

CREATE TABLE public.keyvaluehistory (
   id bigint NOT NULL
      DEFAULT nextval('keyvaluehistory_id_seq'::regclass),
   segkey text NOT NULL,
   dvalue double precision,
   bvalue bytea,
   tstamp timestamp with time zone,
   CONSTRAINT keyvaluehistory_pkey PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)

表上没有外键。

我可以承受几分钟/几小时的停机时间。

postgresql query primary-key

4
推荐指数
1
解决办法
1万
查看次数

为什么更改窗口函数“MAX() OVER()”的ORDER BY部分中的列会影响最终结果?

我有一个具有以下结构的表,它是数据:

create table test_table
(
Item_index   int,
Item_name    varchar(50)
)

insert into test_table (Item_index,Item_name) values (0,'A')
insert into test_table (Item_index,Item_name) values (1,'B')
insert into test_table (Item_index,Item_name) values (0,'C')
insert into test_table (Item_index,Item_name) values (1,'D')
insert into test_table (Item_index,Item_name) values (0,'E')
Run Code Online (Sandbox Code Playgroud)

我想知道为什么更改order by查询部分中的列会更改结果?在QUERY-1, I useditem_indexQUERY-2I useditem_name列中按部分顺序排列。我认为这两个查询必须生成相同的结果because I used item_index in both queries for partitioning!我现在完全困惑了!为什么按列排序会影响最终结果?

查询-1:

select t.*,
       max(t.Item_name)over(partition by t.item_index order by item_index) new_column
from test_table t;
Run Code Online (Sandbox Code Playgroud)

结果:

Item_index …
Run Code Online (Sandbox Code Playgroud)

sql-server query t-sql window-functions sql-server-2016

4
推荐指数
1
解决办法
688
查看次数

查询存储需要很长的时间来加载持续时间

我正在运行查询存储以使数据库性能更好。到目前为止,它一直工作正常。当我尝试加载最后一天的热门持续时间时,我花了 26 分钟来加载屏幕。

我运行的 SQL 版本是: Microsoft SQL Server 2017 (RTM-CU27) (KB5006944) - 14.0.3421.10 (X64) Oct 14 2021 00:47:52 版权所有 (C) 2017 Microsoft Corporation Standard Edition (64-bit) o​​n Windows Server 2019 Datacenter 10.0(内部版本 17763:)(虚拟机管理程序)

QS 中弹出查询:

/*
This query text was retrieved from showplan XML, and may be truncated.
*/

SELECT TOP (@results_row_count)
    p.query_id query_id,
    q.object_id object_id,
    ISNULL(OBJECT_NAME(q.object_id),'') object_name,
    qt.query_sql_text query_sql_text,
    ROUND(CONVERT(float, SUM(rs.avg_duration*rs.count_executions))*0.001,2) total_duration,
    SUM(rs.count_executions) count_executions,
    COUNT(distinct p.plan_id) num_plans
FROM sys.query_store_runtime_stats rs
    JOIN sys.query_store_plan p ON p.plan_id = rs.plan_id
    JOIN …
Run Code Online (Sandbox Code Playgroud)

performance sql-server query query-store sql-server-2017

4
推荐指数
1
解决办法
1555
查看次数

如何检索表中的最大值及其对应的日期

我试图弄清楚如何从数据集中检索最小/最大值和最小/最大日期,以及每个最小/最大值对应的日期值。

示例数据

CREATE TABLE mytable
    ([ID] int, [TEMP] FLOAT, [DATE] DATE)
;

INSERT INTO mytable
    ([ID], [TEMP], [DATE])
VALUES
    (8305,  16.38320208,  '03/22/2002'),
    (8305,  17.78320208,  '11/15/2010'),
    (8305,  16.06320208,  '03/11/2002'),
    (8305,  18.06320208,  '02/01/2007'),
    (2034,  5.2,  '03/12/1985'),
    (2034,  2.24,  '05/31/1991'),
    (2034,  6.91,  '09/15/1981'),
    (2034,  7.98,  '07/16/1980'),
    (2034,  10.03,  '03/21/1979'),
    (2034,  6.85,  '11/19/1982')
;
Run Code Online (Sandbox Code Playgroud)

查询TEMPDATE列的最小值/最大值:

SELECT ID,
    COUNT(TEMP) AS COUNT,
    MAX(TEMP) AS MAXTEMP,
    MAX(DATE) AS MAXDATE
FROM mytable
GROUP BY ID;
Run Code Online (Sandbox Code Playgroud)

检索这个:

|   ID | COUNT |     MAXTEMP …
Run Code Online (Sandbox Code Playgroud)

sql-server query max

4
推荐指数
2
解决办法
3万
查看次数

仅选择列中所有值都与 id 值匹配的行

给定表

序列号 序列状态
1 A
1
2 A
2 A
3 A
4
5 C

我想选择不同的 seq_id,其中 seq_status 为 A(2 和 3),并且如果其中一个值不同则不返回

到目前为止我有一些看起来像这样的东西

SELECT distinct(s.seq_id) FROM sequence s
having s.seq_id IN (
    select z.seq_id
    from sequence z
    group by z.seq_id, z.seq_status
    having z.seq_status = "A" )
Run Code Online (Sandbox Code Playgroud)

但这会返回带有 seq_status A 的任何 seq_id,并且我只查找 seq_id,其中 seq_status 全部与所需值匹配

mysql query select

4
推荐指数
1
解决办法
5145
查看次数

PostgreSQL 中的操作顺序是什么?

我是一名数据库学生,我执行了以下查询来同时学习一些内容(LEFT/RIGHT JOIN、UNION、WHERE + RegEx)。令我困扰的是执行顺序。我有两个表,如下所示:

create table practicaleft(
    id smallint primary key,
    nombre varchar,
    cumple date
);

create table practicaright(
    id smallint primary key,
    apellido varchar,
    cumpleanios date
);
Run Code Online (Sandbox Code Playgroud)

然后,我插入一些随机数据:

INSERT INTO practicaleft VALUES
(1, 'John', CURRENT_DATE - 1),
(5, 'Alice', CURRENT_DATE - 5),
(3, 'Bob', CURRENT_DATE - 3),
(7, 'Eva', CURRENT_DATE - 7);

INSERT INTO practicaright VALUES
(5, 'Doe', CURRENT_DATE - 5),
(6, 'Smith', CURRENT_DATE - 6),
(3, 'Johnson', CURRENT_DATE - 3),
(4, 'Brown', CURRENT_DATE - 4);
Run Code Online (Sandbox Code Playgroud)

之后,我执行此查询:

select id, …
Run Code Online (Sandbox Code Playgroud)

postgresql query execution-plan

4
推荐指数
2
解决办法
2256
查看次数

测试查询速度

当我第一次运行查询时,执行需要 x 毫秒。当我第二次运行它时,它花费的时间要少得多。我假设这个机制涉及一些缓存,但我需要知道我的查询的真实速度是多少。

  • 我可以在查询指令后重置缓存或类似的东西吗?
  • 在开发阶段,您使用什么来查看查询速度?
  • 你能给我提供一个有用的资源/工具/教程/博客来阅读这个东西/功能/问题吗?

顺便说一句,我在 Windows (XAMPP) 中使用 Apache、MySQL 和 PHP。

mysql testing windows query php

3
推荐指数
1
解决办法
2480
查看次数

非确定性聚合结果

为什么我的查询是不确定的?

我有执行以下操作的查询:

select sum(float1*float2*coalesce(float3,1)) from table
Run Code Online (Sandbox Code Playgroud)

当我运行这个查询时,我得到了一个确定性的结果,但是当查询运行很多次时,情况似乎并非如此。

结果中的最后一个整数因不同的运行而异。

所有列都是 (float,null)

所有运行的浮动截断都应该相同吗?

sql-server-2008 query aggregate

3
推荐指数
1
解决办法
621
查看次数

MySQL UPDATE 替换 LONGTEXT 字段中的文本

我有一个 WordPress 表wp_posts,我想运行一个 UPDATE 将我的旧域中的 url 替换为我的新域。

例如,假设该字段post_content中的一条记录具有以下内容:

This is my <a href="http://www.my-old-site.com/link/to/some/page">old web</a> site.
<img src="http://www.my-old-site.com/wp-content/upload/2012/02/my-image-file.jps />
Run Code Online (Sandbox Code Playgroud)

我希望它变成:

This is my <a href="http://www.my-new-site.com/link/to/some/page">old web</a> site.
<img src="http://www.my-new-site.com/wp-content/upload/2012/02/my-image-file.jps />
Run Code Online (Sandbox Code Playgroud)

我试过以下查询

UPDATE wp_posts AS w` 
SET w.post_content = REPLACE(w.post_content, 'my-old-site.com', 'my-new-site.com');
Run Code Online (Sandbox Code Playgroud)

但我没有得到任何结果。

知道如何修复它吗?

mysql-5 query

3
推荐指数
1
解决办法
8831
查看次数

如何使用 ON DUPLICATE KEY 进行更新

考虑一个表

CREATE TABLE test
(
id int(11) unsigned NOT NULL AUTO_INCREMENT,
external_id int(11),
number smallint(5),
value varchar(255),
UNIQUE INDEX (external_id, number),
PRIMARY KEY(id)
) ENGINE=InnoDB
Run Code Online (Sandbox Code Playgroud)

将 number 的值更新为

UPDATE test SET number=number + 1 WHERE external_id='X'
Run Code Online (Sandbox Code Playgroud)

或者

UPDATE test SET number='Y' WHERE external_id='X'
Run Code Online (Sandbox Code Playgroud)

由于 external_id-number 对是唯一的,如果 number 的新值存在,则不会更新。

如何根据 UNIQUE 约束使用类似INSERT ... ON DUPLICATE KEY增加numberby的值number + 1以达到可用值并完成UPDATE任务?

mysql innodb query duplication unique-constraint

3
推荐指数
1
解决办法
1万
查看次数