[英]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.