私は2つのテーブルUserSession
とSale
.
テーブルには、、 のUser
4 つの列があります。UserID
UserSessionID
SessionOpenDate
SessionCloseDate
表には、、およびSale
の 2 つの列があります。price
cost
userID
CompletedDate
User
ユーザーがログインすると、テーブルに新しい行が作成され、ユーザーのログイン タイムスタンプが に保存され、SessionOpenDate
新しい行がUserSessionID
セッションに割り当てられます。ユーザーがログオフすると、ログオフのタイムスタンプが に保存されSessionCloseDate
ます。
ユーザーがまだログインしている場合、ユーザーは販売を行うことができ、販売情報がSale
テーブルに保存されます。CompletedDate
保存された列で販売が確定したときのタイムスタンプ。
なんらかの理由で、が と 内にある必要がある特定のUserSessionID
場所ですべての販売を完了する必要があります。ただし、ユーザーがまだログオフしていない場合、つまり の値が 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 ブロックの何が問題だったのか誰か教えてもらえますか?