我有 2 张桌子UserSession
和Sale
.
表有 4 列,User
即UserID
、UserSessionID
和。SessionOpenDate
SessionCloseDate
表Sale
有 2 列,分别是price
、cost
和。userID
CompletedDate
当用户登录时,会在User
表中创建一个新行,其中将保存用户的登录时间戳,并为会话分配SessionOpenDate
一个新行。UserSessionID
当用户注销时,注销时间戳将保存在SessionCloseDate
.
当用户仍处于登录状态时,用户可以进行一些销售,销售信息保存在Sale
表中。销售完成时的时间戳保存在CompletedDate
列中。
出于某种原因,我需要在必须在and内的某个特定UserSessionID
位置完成所有销售。但是,如果用户还没有注销,这意味着 in 的值为 null,则 应该介于与 now 之间。CompletedDate
SessionOpenDate
SessionCloseDate
SessionCloseDate
CompletedDate
SessionOpenDate
这是我的查询:
SELECT SUM(s.cost) AS Cost, SUM(s.price) AS Price
FROM Sale AS s
INNER JOIN UserSession AS u
ON s.userID = u.userID
WHERE
(s.CompletedDate >=
( SELECT SessionOpenDate
FROM UserSession
WHERE (UserSessionID = u.UserSessionID)
)
)
AND
(s.CompletedDate <
(
IF EXISTS
(
SELECT SessionCloseDate AS closeTime
FROM UserSession AS UserSessionTemp
WHERE (UserSessionID = u.UserSessionID)
)
BEGIN
SET closeTime = SELECT CURRENT_TIMESTAMP
END
)
)
AND u.UserSessionID IN (1)
但是,Sql Server 说Incorrect syntax near the keyword 'IF'.
and Incorrect syntax near ')'
。
谁能告诉我我的 IF 块出了什么问题?