繁体   English   中英

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

[英]SQL - Selecting the 6th visit from a customer

我需要能够报告访问我公司 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
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 次访问。

尝试这样的事情:

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

使用 rank 您可以对由其他列排序的列应用排名。 也许现在不适合你的结构,但如果你了解排名,你可以稍微调整一下。

如果您使用的是存储过程...

创建一个带有标识列的临时表,比如“visitId”。 按访问日期顺序将访问插入到此临时表中。

从临时表中选择一个visitId = 6。

代替:

Visit_TotalVisits = 6

经过:

Visit_TotalVisits >= 6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM