SQL - 选择客户的第6次访问

时间:2015-11-26 13:17:18

标签: sql sql-server date

我需要能够报告访问我公司的客户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

4 个答案:

答案 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