我正在处理的表包含三个组成部分:
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)
我目前的逻辑是:
我知道游标效率很低(我有一个很大的数据集),所以我正在寻找其他方法。
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) 我们已经开始将存储过程命名为[16_TestStoredProc]. 像这样命名存储过程有什么含义吗?
我不会解释我们为什么要这样做。这不是我有问题,而是会产生任何影响。
我正在寻找有关如何使用手动播种设置分布式可用性组的分步演练。我可以让自动播种工作,但是当我尝试手动播种时,我无法将辅助数据库放入转发器上的 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) 看看下面的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_id和network_contact_id字段包含链接到其他表的ID号码。
我希望能够运行INSERT IGNORE查询,此表,但我想用的组合network_id,并network_contact_id作为唯一键来匹配。
因此,举例来说,如果我试图插入一个接触的是有network_id = 4和network_contact_id = 12中,INSERT IGNORE查询将看到该条目已经存在,而忽略被抛出任何错误。
所以基本上,network_id不是唯一的。network_contact_id不是唯一的。但两者的结合是独一无二的。我该如何设置?我是否必须有一个其他字段作为其他两个字段的串联值?或者有没有办法为此表设置密钥,以便它可以满足我的需要?
如何在单个 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 中使用多列?
大概有一个直接而简单的解决方案。我想创建 10000 个新行 - 这些行按顺序编号,每行没有数据(按顺序编号的 id 除外)。我用过了:
INSERT INTO bins (id)
VALUES (1)
Run Code Online (Sandbox Code Playgroud)
创建 ID 为“1”的单行
如何创建具有相应 ID 号的 10000 行?
版本:PostgreSQL 9.5.5
我今天正在查看一个旧的存储过程,并注意到它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) 假设我有一个简单的查询
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 子句真的没有必要吗?
我有一个包含以下数据的表:
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) sql-server ×5
mysql ×3
count ×1
distributed-availability-groups ×1
index-tuning ×1
insert ×1
postgresql ×1
t-sql ×1