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