簡體   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