我需要能够报告访问我公司的客户6次,第6次是今天。
到目前为止,我已经得到了这个,但是这并没有找到昨天曾经访问了5次,然后今天两次访问的人。
SELECT Member_FullName, Branch_Name, Member_Email1, Account_Description, Visit_LastVisitDateOnly
FROM View1
WHERE (Visit_TotalVisits = '6')
AND (Visit_LastVisitDateOnly = CONVERT(DATE, GETDATE()))
来自访问表的行(被问到表的结构)
VisitID BranchID MemberID AccountID Visit
BF98FAC1-F430-47AD-B810-02744A1633EA C4E833C0-7675-4650-8D58-F64DF87BB0F2 E90EC99B-8C15-4F01-AEFC-60430BE4B6BF C404B81D-85C5-42D1-8FD2-52657960FD9A 2015-11-20 16:00:00.000
5C0CB2F0-3ED9-441F-A789-03B679FF85E7 C4E833C0-7675-4650-8D58-F64DF87BB0F2 E90EC99B-8C15-4F01-AEFC-60430BE4B6BF C404B81D-85C5-42D1-8FD2-52657960FD9A 2015-11-20 16:00:00.000
答案 0 :(得分:1)
SELECT AccountID
FROM View1 v
INNER JOIN (SELECT AccountID
FROM Visits
WHERE Visit < CONVERT(DATE, GETDATE())
GROUP BY AccountID
HAVING COUNT(1) = 5) hist ON v.AccountID = hist.AccountID
AND Visit_LastVisitDate = CONVERT(DATE, GETDATE())
子查询visit_history将接收过去5次访问该商店的所有访客 然后它与上次访问日期的视图一起加入。如果上次访问是今天,意味着它是6日,7日,N日或其他什么,但关键是今天发生了第6次访问。
答案 1 :(得分:0)
尝试这样的事情:
SELECT Member_FullName, Branch_Name, Member_Email1, Account_Description, Visit_LastVisitDateOnly,
RANK() OVER (PARTITION BY MemberID ORDER BY Visit_ID DESC) AS Rank
FROM View1
WHERE(Visit_TotalVisits = '6')
AND (Rank = 6)
https://msdn.microsoft.com/en-us/library/ms176102.aspx
使用排名,您可以在其他列排序的列中应用排名。 也许现在不适合你的结构,但如果你了解排名,你可以调整一下。
答案 2 :(得分:0)
如果您使用的是存储过程...
创建一个带有标识列的临时表,比如说“visitId”。 以访问日期顺序将访问次数插入此临时表。
从临时表中选择visitId = 6的那个。
答案 3 :(得分:0)
取代:
Visit_TotalVisits = 6
由:
Visit_TotalVisits >= 6