之前有人问过一个类似的问题,但我一直无法将这些答案调整到我的问题中。
我想在连续日期中查找行,其中另一列具有相同的值,并将其作为单个日期范围返回。
我尝试使用OVER和PARTITION BY以及 ROW_NUMBER() 来获得我需要的结果,但我对这些概念不够熟悉,无法找出正确的输出。
系统为 Microsoft SQL Server 2014。
鉴于:
CREATE TABLE EXCEPTIONS
(
ID NUMERIC(18) NOT NULL,
DATE DATE NOT NULL,
TYPE VARCHAR(20) NOT NULL,
VALUE VARCHAR(20),
);
Run Code Online (Sandbox Code Playgroud)
和数据:
INSERT INTO EXCEPTIONS VALUES
(17482, '2016-08-24', 'PRESSURE_EXCEPTION', 'Over'),
(17482, '2016-08-25', 'PRESSURE_EXCEPTION', 'Over'),
(17482, '2016-08-26', 'PRESSURE_EXCEPTION', 'Over'),
(17482, '2016-09-04', 'PRESSURE_EXCEPTION', 'Over'),
(17482, '2016-09-05', 'PRESSURE_EXCEPTION', 'Over'),
(17482, '2016-09-16', 'PRESSURE_EXCEPTION', 'Under'),
(17482, '2016-09-17', 'PRESSURE_EXCEPTION', 'Under'),
(17482, '2016-09-23', 'PRESSURE_EXCEPTION', 'Under'),
(17482, '2016-09-24', 'PRESSURE_EXCEPTION', 'Under'),
(17482, '2016-09-25', 'PRESSURE_EXCEPTION', 'Under'), …Run Code Online (Sandbox Code Playgroud) 我知道简单查询的查询执行顺序。
但是,我对理解此查询中的确切执行顺序感到困惑:
select
M.DateKey As DateKey ,
PersonnelCode As PersonnelCode,
Isnull((select top 1 BranchCode
from [Financial].[viwPersonnelLocation]
where PersonnelCode = p.PersonnelCode and DateKey <= M.DateKey
order by DateKey desc)
,p.BranchCode) As BranchCode,
Isnull((select top 1 CertficateCode
from [Financial].[viwPersonnelEducation]
where PersonnelCode = p.PersonnelCode and DateKey <= M.DateKey
order by DateKey desc)
,p.Educationcode) As Educationcode
from (select DateKey,MonthOfYearKey,EDATE
from [Common].[DimTime]
where LastDayOfMonthKey = 1) M
Inner Join
[Financial].[viwPersonnelInfo] As P
on m.DateKey >= p.DateOfEmployeement
where (m.DateKey <= p.DateOfLeave) or (p.DateOfLeave='' or p.DateOfLeave is …Run Code Online (Sandbox Code Playgroud) tempdb发生故障转移时如何利用?
假设有两台服务器,服务器 1是主服务器,服务器 2是辅助服务器。突然,故障转移发生了,那么,tempdb在这种情况下如何表现?
sql-server sql-server-2012 failover availability-groups sql-server-2014
我们正在 SQL 服务器表中进行并行、多线程插入,并希望减少闩锁。
利用散列分区来减少闩锁的缺点是什么?从本质上查询所有这些拆分的分区表是否降低了查询速度?
我们有大约 120 表插入每秒,金融系统。
其他注意事项:SQL 2016 系统每年将使用大约 50 GB 的 SSD 硬盘空间。目前,拥有 50 个核心处理器和 150 GB 的 RAM。
平台未搭建,所以没有基线测试;但我需要制定测试计划和策略。
哈希分区示例: http : //www.madeiradata.com/how-to-solve-the-tail-insert-problem-2/
CREATE PARTITION FUNCTION pf_hash (TINYINT)
AS RANGE LEFT FOR VALUES (0,1,2,3,4,5,6,7,8);
CREATE PARTITION SCHEME ps_hash
AS PARTITION pf_hash ALL TO ([PRIMARY]);
CREATE TABLE dbo.UserEntries_RegularWithHash
(
Id BIGINT IDENTITY NOT NULL,
UserId INT NOT NULL ,
CreatedDate DATETIME2 NOT NULL,
HashId AS CAST(Id % 9 AS TINYINT) PERSISTED NOT NULL,
CONSTRAINT PK_UserEntries_RegularWithHash
PRIMARY KEY CLUSTERED …Run Code Online (Sandbox Code Playgroud) 我正在构建一个 POS 系统,在那里我收集事件发生的日期和时间。我想通过DATE在我的 SQL 查询中仅使用datetime 列的一部分来提取一些报告。
我当前的查询如下所示:
SELECT * FROM tbl_item_trans
WHERE (date_time BETWEEN @start AND @end)
ORDER BY date_time DESC, code
Run Code Online (Sandbox Code Playgroud)
但是,如果我输入两个日期,例如 9 月 14 日和 15 日,它只会从 14 中提取数据。如果我想包括 9 月 15 日的交易,结束日期必须是 9 月 16 日。
我怎么解决这个问题?如果我只使用专栏的DATE一部分,那就更好了datetime。
在@start与@end变量使用date的数据类型,例如“2017年9月16日”。
IF (SELECT ars.role_desc
FROM sys.dm_hadr_availability_replica_states ars
INNER JOIN sys.availability_groups ag
ON ars.group_id = ag.group_id
AND ars.is_local = 1) <> 'PRIMARY'
BEGIN
--We're on the secondary node, throw an error
THROW 50001, 'Unable to execute job on secondary node',1
END
Run Code Online (Sandbox Code Playgroud)
设置此步骤以在成功时继续下一步,并在失败时退出报告成功的作业。
你能解释一下如何在所有现有的 SQL 服务器作业中添加这个步骤吗?
我在生产服务器(SQL Server 2012)中有一个数据库,我有一个开发服务器(SQL Server 2014)。
我需要在开发服务器中附加数据库,但我意识到一旦附加它就会自动升级到 2014 版,因此我无法在生产服务器中再次附加它。
是否可以在不升级的情况下将数据库附加到开发服务器中?
我们计划在开发、分离和将其附加到生产中进行更改。
有什么办法可以优化FOR XML PATH语句吗?或者也许我应该使用另一种方法?
目前的方法根本不可接受。这需要几分钟。我知道视图是一个非常大的联盟,需要时间来消耗它,但也许是另一种方式......
这是查询:
SELECT t.serialNumber as TVM
,[issuanceDate] as transactionDate
,ioy.tvmTransactionId as TVM_TRANS_ID
,STUFF((SELECT ', ' + stv.carrierSN
FROM HERMES.wts.v_SaleTransactionView as stv
WHERE stv.tvmTransactionId = ioy.tvmTransactionId
and stv.serialNumber = 'M040'
FOR XML PATH ('')), 1, 2, '') as [serial_numbers]
FROM [hermes].[wts].[IOYLog] ioy
left join Hermes.hermes.Terminals t on ioy.tp_terminalId = t.tp_terminalId
left join hermes.hermes.POS p on t.tp_POSId = p.tp_POSId
left join [Hermes].[wts].[IOUPaymentStatus] [is] on [is].[tp_paymentStatusId] = ioy.status
WHERE [is].includeInReports = 1
and (issuanceDate BETWEEN '2017/09/01' AND '2017/09/08') …Run Code Online (Sandbox Code Playgroud) performance sql-server execution-plan concat query-performance
I have a SQL Server Express 2012 database. There is a table which previously had a column of type nvarchar(255). Now my requirements have changed and I am required to store long strings in the same column, so I modified the columns to have size 512.
alter Table [dbo].[mytable] ALTER COLUMN [mycol] nvarchar(512) NULL;
Run Code Online (Sandbox Code Playgroud)
Now when I try updating data in the column whose size was increased, the update goes through fine. But when I query the data, the …
我有一个长时间运行的扩展事件会话,它捕获rpc_completed为几个过程过滤的事件。它发现了一些已经运行的。但其他人当我知道他们已被处决时,它并没有捕捉到他们。我知道这一点的原因是因为我查看了缓存并发现它们在那里被调用。
我正在使用 SQL Server 2016。我将过滤object_name作为字段名称、equal_i_sql_unicode_string运算符和值减去架构名称。我还修改了会话以添加我知道经常使用的 proc,它可以很好地捕获那些。
为什么它会忽略而不捕获一些?
sql-server ×10
date ×2
partitioning ×2
alter-table ×1
attach ×1
concat ×1
concurrency ×1
failover ×1
hashing ×1
jobs ×1
performance ×1
t-sql ×1
where ×1