SQL查询哪里有问题
我有一个优化了速度的查询,这就是为什么它看起来有点奇怪的原因——前一段时间得到了一些帮助 希望得到这样的确切结果,但我只希望最后一分钟内的结果,而不是更早的结果 无论发生什么,此查询都将返回最后100,而不仅仅是最后一分钟的结果 SessionGuid不是唯一的——事实上,它是这个表中多行上的一个键 谢谢你的帮助SQL查询哪里有问题,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个优化了速度的查询,这就是为什么它看起来有点奇怪的原因——前一段时间得到了一些帮助 希望得到这样的确切结果,但我只希望最后一分钟内的结果,而不是更早的结果 无论发生什么,此查询都将返回最后100,而不仅仅是最后一分钟的结果 SessionGuid不是唯一的——事实上,它是这个表中多行上的一个键 谢谢你的帮助 SELECT TOP(@resultCount) * FROM ( SELECT [UserSessionSequenceID] ,[
SELECT TOP(@resultCount) * FROM
(
SELECT
[UserSessionSequenceID]
,[SessionGuid]
,SiteID
,IP
,UrlTitle
,Url
,Referer
,[Timestamp]
,ROW_NUMBER() over (
PARTITION BY [SessionGuid]
ORDER BY UserSessionSequenceID DESC)
AS sort
FROM [tblSequence]
where SiteID = @siteID
and [Timestamp] > DATEADD(mi, -@minutes, (LEFT(GETDATE(),12)))
) AS new
WHERE sort = 1
and not exists (
select SessionGuid
from tblSequence
where SiteID = @siteID
and SessionGuid = new.SessionGuid
and [TimeStamp] < DATEADD(mi, -@minutes, (LEFT(GETDATE(),12)))
)
ORDER BY [UserSessionSequenceID] DESC
试用
DATEADD(mi, -@minutes, GETDATE())
而不是
DATEADD(mi, -@minutes, (LEFT(GETDATE(),12)))
试用
DATEADD(mi, -@minutes, GETDATE())
而不是
DATEADD(mi, -@minutes, (LEFT(GETDATE(),12)))
我将您的查询重新编写为:
WITH new AS (
SELECT [UserSessionSequenceID],
[SessionGuid],
SiteID,
IP,
UrlTitle,
Url,
Referer,
[Timestamp],
ROW_NUMBER() OVER (PARTITION BY [SessionGuid]
ORDER BY UserSessionSequenceID DESC) AS sort
FROM [tblSequence]
WHERE SiteID = @siteID
AND [Timestamp] > DATEADD(mi, -@minutes, GETDATE()))
SELECT TOP(@resultCount)
n.*
FROM new n
WHERE n.sort = 1
AND NOT EXISTS (SELECT NULL
FROM tblSequence s
WHERE s.siteid = n.siteid
AND s.sessionguid = n.sessionguid
AND [TimeStamp] <= DATEADD(mi, -@minutes, GETDATE())
ORDER BY n.usersessionsequenceid DESC
我将您的查询重新编写为:
WITH new AS (
SELECT [UserSessionSequenceID],
[SessionGuid],
SiteID,
IP,
UrlTitle,
Url,
Referer,
[Timestamp],
ROW_NUMBER() OVER (PARTITION BY [SessionGuid]
ORDER BY UserSessionSequenceID DESC) AS sort
FROM [tblSequence]
WHERE SiteID = @siteID
AND [Timestamp] > DATEADD(mi, -@minutes, GETDATE()))
SELECT TOP(@resultCount)
n.*
FROM new n
WHERE n.sort = 1
AND NOT EXISTS (SELECT NULL
FROM tblSequence s
WHERE s.siteid = n.siteid
AND s.sessionguid = n.sessionguid
AND [TimeStamp] <= DATEADD(mi, -@minutes, GETDATE())
ORDER BY n.usersessionsequenceid DESC