我们的一位开发人员添加了以下代码以从表中删除重复记录:
DELETE SubQuery
FROM
(
SELECT ID
,FK1
,FK2
,CreatedDateTime
,ROW_NUMBER() OVER(PARTITION BY FK1, FK2 ORDER BY CreatedDateTime) AS RowNumber
FROM Table
)
AS SubQuery
WHERE RowNumber > 1
Run Code Online (Sandbox Code Playgroud)
在查看代码时,我认为它不起作用,但是在我们的测试环境 (SQL 2014) 中测试它表明它起作用了!
SQL 如何知道解析子查询并从中删除记录table?
尝试向NOT NULL具有 10 亿行的表添加约束。我无法承受超过几秒钟的表锁。有没有办法在alter table 语句期间防止全表扫描?我在列上创建了一个索引,希望它能被使用,但这似乎不起作用。可能是检查约束?其他选择?谢谢!
我有两个表,“hierarchy_table”和“name_table”。
层次结构表包含一个具有多个父级和子级的对象。每个父级和子级都由 id 引用。
| object_id | parent_id_1 | parent_id_2 | child_id_1 | child_id_2 |
-----------------------------------------------------------------------------
| 1234 | 9999 | 9567 | 5555 | 5556 |
-----------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
hierarchy_table 中的每个对象 id 在 name_table 中都有一个条目:
| name_id | name |
--------------------------
| 1234 | ABCD |
--------------------------
| 9999 | ZYXW |
--------------------------
| ...
Run Code Online (Sandbox Code Playgroud)
如何将hierarchy_table 中的每个id 多次加入name_table,以便我可以得到填充每个名称的结果?
像这样:
| object | parent_1 | parent_2 | child_1 | child_2 |
-----------------------------------------------------------------------------
| ABCD | ZYXW | BBBB | CCCC | DDDD …Run Code Online (Sandbox Code Playgroud) 我有一个超过 500GB 的大型 PostgreSQL 数据库,它太大了。有没有办法将数据库压缩到更易于管理的大小?我曾尝试使用 SquashFS 执行此操作,并且将数据库压缩到 177GB,但是 PostgreSQL 要求数据库具有写入权限并且 Squashed 系统是只读的。更有经验的数据库用户对实现这个目标有什么建议吗?
该数据库保存地球的 GIS 数据,并将在已部署的系统上本地使用。目前它位于 1TB SSD 上,但是,我试图避免仅仅为了容纳大型数据库而插入额外的硬盘驱动器。数据库按预期执行,没有问题,我只是想将其压缩到更易于管理的大小,并避免将其放在单独的驱动器上。
我有一个将两条记录插入到表中的存储过程,记录之间的区别在于第二条记录的时间列在第一条@MinToAdd之后:
CREATE PROCEDURE CreateEntry
/*Other columns*/
@StartTime time(2),
@EndTime time(2),
@MinutesToAdd smallint
AS
BEGIN
SET NOCOUNT ON;
SET @MinutesToAdd = @MinutesToAdd % 1440; --Prevent overflow if needed?
IF (@MinutesToAdd > 0)
BEGIN
INSERT INTO ClientNotification (/*Other columns*/ startTime, endTime)
OUTPUT inserted.id
VALUES
(/*Other columns*/ @StartTime, @EndTime),
(/*Other columns*/ @StartTime + @MinutesToAdd, @EndTime + @MinutesToAdd);
END
ELSE
BEGIN
/*Whatever ELSE does.*/
END
END
Run Code Online (Sandbox Code Playgroud)
将@MinutesToAdd分钟添加到@StartTime和的正确方法是什么@EndTime?
请注意我使用的是time数据类型。
更新:
正确答案应包含以下信息:
time数据类型。 …使用 Enterprise DB 构建的 Windows 安装程序从 PostgreSQL(例如 9.3.0 到 9.3.1)执行小升级的推荐方法是什么?我应该先卸载还是在现有安装上安装?
当前安装是使用 postgresql-9.3.0-1-windows-x64.exe 执行的。现在我想使用 postgresql-9.3.1-1-windows-x64.exe 进行升级。
重命名大小为 219 GB 的表需要多长时间?
这是我们服务器的规格:
MySQL Ver 14.12 分发版 5.0.77
对困惑感到抱歉。我们的计划是重命名一个大小为 219 GB 的 MySQL 表。需要花多长时间?我们需要为这次迁移准备大磁盘空间吗?
表的引擎:InnoDB.
通常在查询我的 MS SQL Server 数据库时,我需要创建一个计算字段,例如
(CASE WHEN A.type = 'Workover' THEN 'Workover'
ELSE (CASE WHEN substring(C.category, 2, 1) = 'D' THEN 'Drilling'
WHEN substring(C.category, 2, 1) = 'C' THEN 'Completion'
WHEN substring(C.category, 2, 1) = 'W' THEN 'Workover'
ELSE 'Other'
END)
END)
Run Code Online (Sandbox Code Playgroud)
然后我需要通过这个计算字段(等等)对我的结果进行分组。因此,我在 SELECT 和 GROUP BY 子句中进行了相同的计算。SQL 服务器实际上执行了两次这些计算,还是它足够聪明,只执行一次?
我正在研究将 CSV 文件 ( customers.csv) 导入 MySQL 表 ( customers) 的PHP 脚本。
在将 CSV 文件的内容插入 mysql 表之前,我首先备份原始customers表。
我将整个导入过程(包括备份)包装在一个 mysql 事务中(以解决 CSV 在中间某处损坏的情况,并确保导入是原子的)。
问题是当我在INSERT INTO语句之后立即调用它时 ROLLBACK 似乎不起作用:通过 phpMyAdmin 检查数据库时,我可以看到新创建的表和 ROWS INSIDE IT 在 rollback 后仍然存在。
以下是操作日志:
[2015-01-19 14:08:11] DEBUG: "START TRANSACTION" [] []
[2015-01-19 14:08:11] DEBUG: SHOW TABLES LIKE :table_name; [] []
[2015-01-19 14:08:28] DEBUG: CREATE TABLE `customers__20150119_14_08_20` LIKE `customers` [] []
[2015-01-19 14:08:37] DEBUG: INSERT INTO `customers__20150119_14_08_20` SELECT * FROM `customers` [] …Run Code Online (Sandbox Code Playgroud) 我正在处理的表包含三个组成部分:
ID列(另一个表中的主键)from/to列。价值观:
ID Data From To
1 a 2015-01-01 2015-01-05
1 a 2015-01-06 2015-01-10
1 b 2015-01-11 2015-01-15
1 a 2015-01-16 2015-01-20
2 c 2015-01-01 2015-01-05
2 c 2015-01-06 2015-01-10
Run Code Online (Sandbox Code Playgroud)
该表通过以某些时间间隔拍摄另一个数据源的“快照”并将有效日期分配给记录来更新。问题是这些快照会为在该时间间隔内根本没有更改的记录(具有不同的有效日期)创建重复条目。
我想通过查找具有连续日期的行并合并它们并为它们分配一个有效期来减小表的大小。例如:
ID Data From To
1 a 2015-01-01 2015-01-10
1 b 2015-01-11 2015-01-15
1 a 2015-01-16 2015-01-20
2 c 2015-01-01 2015-01-10
Run Code Online (Sandbox Code Playgroud)
我目前的逻辑是:
我知道游标效率很低(我有一个很大的数据集),所以我正在寻找其他方法。
postgresql ×4
sql-server ×4
alter-table ×2
mysql ×2
compression ×1
innodb ×1
installation ×1
join ×1
rollback ×1
subquery ×1
transaction ×1
upgrade ×1