我有2個表,客戶和CustomerActivity如下面的圖片中顯示,獲得通過日期最新行:計數行並從多個表
我想輸出表:
- 具有來自Customer表的CustomerType ='Existing Customer'的所有列,再加上2列:
- totalActivity(count activityID) - 顯示每個客戶的總活動數。
- latestActivity(最大checkinTime) - 顯示在最近一次活動的日期時間
到目前爲止,我有這2個查詢,但我不知道如何組合/加入和過濾它們以獲得我所需要的。任何人都可以用1個查詢幫助(有些解釋是完美的)
SELECT customerId, firstName, birthDate, customerType
FROM Customer
WHERE Customer.customerType = 'Existing Customer'
SELECT t1.activityId, t1.checkinTime, t1.customerId
FROM CustomerActivity t1
inner join (
SELECT customerId, max(checkinTime) as Lastest
FROM CustomerActivity
group by customerId
) t2 on t1.customerId = t2.customerId and t1.checkinTime = t2.Lastest
它完美的作品! – 2015-04-06 02:19:27
正如我在回答的評論中指出的那樣,我相信由於子查詢,這種方法效率會降低。我建議看看兩者的執行計劃,但我願意打賭,這種方法將彙總每個客戶的總體活動和最新活動,而直接加入表格會顯示您僅針對「現有「 顧客。唯一我不確定的是,如果這將被優化,但我不認爲它會。如果您有200萬客戶,其中只有20萬客戶是現有客戶,這可能會在性能上產生巨大差異。 – 2015-04-06 02:31:18
@ScottSmith,同意。我不知道優化器是否足夠聰明以優化它,只有現有的客戶纔會被聚合。我建議OP應該看執行計劃。 – 2015-04-06 02:36:13