小编ype*_*eᵀᴹ的帖子

如何合并具有不同有效期的相似记录?

我正在处理的表包含三个组成部分:

  1. ID列(另一个表中的主键)
  2. 一些数据列
  3. 日期有效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)

我目前的逻辑是:

  1. 按 ID、数据字段和“有效自”字段选择和排序所有行(因此它们在连续行的组中)。
  2. 使用游标比较相邻行的相似性。
  3. 如果它们相同,则合并行并更改有效期以包括两行。

我知道游标效率很低(我有一个很大的数据集),所以我正在寻找其他方法。

sql-server sql-server-2008-r2 gaps-and-islands

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

在这种情况下将使用哪个索引?

SQL Server 2014 标准版

我需要找到特定月份往返特定城市的航班数量。例如

select count(*) 
from flights 
where flightTo_AirportCode = 'aaaa' 
and flightFrom_Airportcode = 'bbbb' 
and flightdate < '2016-04-01' 
and flightdate > '2016-02-28' ;
Run Code Online (Sandbox Code Playgroud)

表架构如下。

我试图估计索引模型 A 或索引模型 B(如下)是否更可取(构建索引需要很多小时,并且磁盘空间一次只允许一个存在,所以我试图在跳跃之前查看)。

根据我的经验,任何一个索引都可以。我对吗?

  create index [modelA] on flights (flightTo_AirportCode, flightFrom_AirportCode, flightDate)

  create index [modelB] on flights (flightDate, flightTo_AirportCode, flightFrom_AirportCode)
Run Code Online (Sandbox Code Playgroud)

(或者,更好的是,我可以使用二进制索引或高级机制来解决这个问题吗?)

CREATE TABLE [dbo].[flights](
    [flightId] [uniqueidentifier] NOT NULL,
    [accountId] [uniqueidentifier] NULL,
    [flightDate] [datetime] NULL,
    [flightTo_AirportCode] [nvarchar](30) NULL,
    [flightFrom_AirportCode] [nvarchar](30) NULL,
    -- ... 45 more fields
    CONSTRAINT [PK_flight] PRIMARY KEY CLUSTERED 
(
    [flightId] …
Run Code Online (Sandbox Code Playgroud)

sql-server index-tuning sql-server-2014

11
推荐指数
1
解决办法
435
查看次数

SQL Server 存储过程命名

我们已经开始将存储过程命名为[16_TestStoredProc]. 像这样命名存储过程有什么含义吗?

我不会解释我们为什么要这样做。这不是我有问题,而是会产生任何影响。

sql-server sql-server-2012

11
推荐指数
1
解决办法
802
查看次数

具有手动播种的分布式可用性组

我正在寻找有关如何使用手动播种设置分布式可用性组的分步演练。我可以让自动播种工作,但是当我尝试手动播种时,我无法将辅助数据库放入转发器上的 AG。

如果我在尝试将数据库添加到常规 AG 之前将分布式 AG 添加到辅助服务器,则会收到以下消息:

Msg 41190, Level 16, State 7, Line 22
Availability group 'MYDB' failed to process add-database command.  The local availability replica is not in a state that could process the command.  Verify that the availability group is online and that the local availability replica is the primary replica, then retry the command. 
Run Code Online (Sandbox Code Playgroud)

如果我尝试先添加数据库而不加入辅助数据库上的分布式 AG,我会收到以下消息,因为它认为它应该是主数据库:

Msg 927, Level 14, State 2, Line 22
Database 'MYDB' cannot be opened. It is in the middle of a …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2017 distributed-availability-groups

11
推荐指数
1
解决办法
2602
查看次数

如何通过表字段的组合使用唯一键?

看看下面的sqlfiddle:http ://sqlfiddle.com/#!2/dacb5/1

CREATE TABLE contacts 
    (
     id int auto_increment primary key, 
     name varchar(20), 
     network_id int,
     network_contact_id int
    );

INSERT INTO contacts
(name, network_id, network_contact_id)
VALUES
('John', 4, 10),
('Alex', 4, 11),
('Bob', 4, 12),
('Jeff', 4, 45),
('Bill', 7, 11),
('Walter', 7, 45),
('Jessie', 7, 360) ;
Run Code Online (Sandbox Code Playgroud)

我有一个基本的联系人表。该network_idnetwork_contact_id字段包含链接到其他表的ID号码。

我希望能够运行INSERT IGNORE查询,此表,但我想用的组合network_id,并network_contact_id作为唯一键来匹配。

因此,举例来说,如果我试图插入一个接触的是有network_id = 4network_contact_id = 12中,INSERT IGNORE查询将看到该条目已经存在,而忽略被抛出任何错误。

所以基本上,network_id不是唯一的。network_contact_id不是唯一的。但两者的结合是独一无二的。我该如何设置?我是否必须有一个其他字段作为其他两个字段的串联值?或者有没有办法为此表设置密钥,以便它可以满足我的需要?

mysql uniqueidentifier insert unique-constraint

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

如何将 COUNT 与多列一起使用?

如何在单个 COUNT 中使用多列?

假设有一个demo包含这些数据的表:

id |  col1  |  col2  |    
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*  
1  |'alice' | 'book1'|  
2  |'bob'   | 'book1'|  
3  |'alice' | 'book2'|  
4  |'alice' | 'book3'|
Run Code Online (Sandbox Code Playgroud)

我想找到用户和书名的所有组合的计数。

我试过,如果我运行distinct,一切都很好。
select count(distinct col1, col2) from demo

但是,当我删除时distinct,sql 语句将不会在 mysql 控制台中传递。
select count(col1, col2) from demo

问题是如何COUNT在 MySql 中使用多列?

mysql count

10
推荐指数
2
解决办法
6万
查看次数

插入 10000 个新行?

大概有一个直接而简单的解决方案。我想创建 10000 个新行 - 这些行按顺序编号,每行没有数据(按顺序编号的 id 除外)。我用过了:

INSERT INTO bins (id)
VALUES (1)
Run Code Online (Sandbox Code Playgroud)

创建 ID 为“1”的单行

如何创建具有相应 ID 号的 10000 行?

版本:PostgreSQL 9.5.5

postgresql postgresql-9.5

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

我们还应该使用 QUOTENAME 来防止注入攻击吗?

我今天正在查看一个旧的存储过程,并注意到它quotename在输入参数上使用。在做了一些挖掘以弄清楚它到底做了什么之后,我发现了这个站点。我现在了解它的作用以及如何使用它,但该站点表示它被用作 SQL 注入攻击的缓解措施。当我过去使用 asp.net 开发直接查询数据库的应用程序时,我会使用 ADO.Net 参数将用户输入作为文字值传入,而从不真正担心在我的存储过程中保护它。

我现在正在编写一个存储过程,该过程将由我不编写的应用程序使用,因此我确实需要尝试在过程级别防止注入攻击,这是quotename最好的方法还是有更新的功能/更好的方法?

让我了解这种思维模式的代码(@parm1是用户输入参数):

'SELECT project [Project], project_desc [Description], 
        customer [Customer], cpnyid [Company]
FROM PJPROJ (nolock)
where project like ' + quotename(@parm1,'''') + '
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-injection t-sql

9
推荐指数
1
解决办法
3028
查看次数

在 group by 子句之后是否需要 order by?

假设我有一个简单的查询

SELECT col1, col2, COUNT(col3)  
FROM tbl_name    
WHERE condition    
GROUP BY col1, col2    
ORDER BY col1 ;
Run Code Online (Sandbox Code Playgroud)

我的理解是 group by 子句似乎已经具有排序功能。如果 col1 的相邻行碰巧具有相同的值,则 DB 引擎将对 col1 进行排序,然后对 col2 进行排序。至少这是我使用 sql server 的经验。

如果是这样的话,这里的 order by 子句真的没有必要吗?

sql-server

9
推荐指数
2
解决办法
9449
查看次数

选择具有相同值的“连续”行

我有一个包含以下数据的表:

userID  tStamp                status
------  -------------------   ------
Jason   2017-10-18 03:20:00   idle  
Brown   2017-10-18 03:20:28   idle  
Brown   2017-10-18 03:25:28   idle  
Brown   2017-10-18 04:00:28   active    
Brown   2017-10-18 04:10:28   active    
Brown   2017-10-18 04:35:28   idle  
Brown   2017-10-18 04:45:28   idle  
Run Code Online (Sandbox Code Playgroud)

我想提取具有相同状态连续行。例如,我想查看用户在 'idle' status,然后是 'active' status,然后是 'idle' status,等等所花费的时间。

如何在单个 SQL 查询中执行此操作?

我想要的输出如下:

userID        staus          Duration_in_this_status (min)
------  -------------------   ------
Jason         idle             ---  
Brown         idle              5
Brown         active           10   
Brown         idle             10   
Run Code Online (Sandbox Code Playgroud)

mysql gaps-and-islands

9
推荐指数
1
解决办法
7253
查看次数