我有四个表Transaction
,Merchant
,onlineuser
和onlineuserhistory
。
当用户进入onlinesite
时,我们在onlineuser
表中使用entry_date
和expiry_date
为该用户创建一行。然后,只要他访问该网站,我们都会在onlineuserhistory
表中创建一个条目,因此对于日期11/1/2016到11/15/2016,他将在onlineuser
表中有一条记录,在onlineuserhistory
中有5条记录>桌子,因为他可能已经拜访过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条记录。 最佳答案
您可以添加一个子查询,该查询返回在此期间是否有人在线。
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'