我有四个表Transaction
,Merchant
,onlineuser
和onlineuserhistory
。
当用户进入onlinesite
时,我们会在onlineuser
表格中为entry_date
和expiry_date
为该用户创建一行。然后每当他进入网站时,我们在onlineuserhistory
表中创建一个条目,因此对于2016年11月1日至2016年11月15日的日期,他将在onlineuser
表和5中有一条记录onlineuserhistory
表中的记录,因为他可能已经访问了5次。
现在当月份到期时,如果他在2016年11月16日前往网站,onlineuser
将更改日期,因为该商家和该用户只能存在一条记录。
出于报告目的,我需要检查onlineuserhistory
表中是否存在至少一条记录。之前写过的人用左连接写到了onlieuser
表。
SELECT COUNT(*) AS TotalNumPurchases
FROM Transactions t
INNER JOIN Merchants m ON m.MerchantID = t.FromEntityID AND
m.StatusID = 8 AND m.IsHidden = 0
INNER JOIN MerchantLocations ml ON m.MerchantID = ml.MerchantID
INNER JOIN Accounts AS a on t.ToEntityID = a.AccountID
LEFT JOIN onlineuser au ON m.MerchantID = au.MerchantID and
a.ManagerUserID = au.UserID
a.ManagerUserID = au.UserID
WHERE t.ToEntityTypeID = 5
AND t.TransactionDate BETWEEN '2016-11-11 07:00:00' AND '2016-11-15 06:59:59'
我如何更新这个以便我可以检查onlineuserhistory
表以检查该日期范围内是否存在至少一条记录,如果存在多条记录,那么我也应该考虑1条记录为此。
答案 0 :(得分:0)
您可以添加一个子查询,以返回在此期间是否有人在线。
SELECT COUNT(*) AS TotalNumPurchases,
(SELECT COUNT(*) > 0
FROM onlineuserhistory
WHERE date BETWEEN '2016-11-11 07:00:00' AND '2016-11-15 06:59:59') AS anyOnline
FROM Transactions t
INNER JOIN Merchants m ON m.MerchantID = t.FromEntityID AND
m.StatusID = 8 AND m.IsHidden = 0
INNER JOIN MerchantLocations ml ON m.MerchantID = ml.MerchantID
INNER JOIN Accounts AS a on t.ToEntityID = a.AccountID
LEFT JOIN onlineuser au ON m.MerchantID = au.MerchantID and
a.ManagerUserID = au.UserID
WHERE t.ToEntityTypeID = 5
AND t.TransactionDate BETWEEN '2016-11-11 07:00:00' AND '2016-11-15 06:59:59'