我有四个表TransactionMerchantonlineuseronlineuserhistory
当用户进入onlinesite时,我们在onlineuser表中使用entry_dateexpiry_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'

09-11 19:54