2017-03-08 57 views
0

我有一個問題與SQL查詢。在這種情況下,我需要得到其最後的歷史活動是14天前的用戶,但我的歷史是空的,我怎麼可以這樣做:如果電子郵件歷史記錄爲空上期14天,選擇沒有電子郵件歷史SQL查詢選擇列表是否爲空

SELECT st.id, st.firstName, st.lastName, st.email, st.lastLogin, st.phone, st.gender, sa.title,bra.Title as brand, ss.SaleDate, teh.sDate, sa.imageUrl, sa.guid, st.mallId, sa.id saleId 
FROM dbo.Users st 
INNER JOIN KEY_SalesToUsers ss ON (st.ID=ss.userID) 
INNER JOIN Sales sa ON (sa.ID=ss.SaleID) 
INNER JOIN Brands bra ON (sa.BrandID=bra.ID) 
INNER JOIN dbo.UserEmailHistory teh ON st.id = teh.userId 
WHERE CONVERT(date,DATEADD(day,1,ss.SaleDate))= CONVERT(date,getdate()) 
AND teh.sDate >= dateadd(dd,-14,getdate()) 
AND teh.sDate <= dateadd(dd,-13,getdate()) 
AND sDate <= dateadd(dd,-1,getdate()) 
ORDER BY ss.SaleDate DESC 
+0

閱讀關於'LEFT JOIN'與'INNER JOIN' – Shnugo

回答

1

而不是

INNER JOIN dbo.UserEmailHistory teh ON st.id = teh.userId 

嘗試使用

LEFT OUTER JOIN dbo.UserEmailHistory teh ON st.id = teh.userId 
+0

好的,但我的歷史現在是空的。所以請求將返回空數組。如果歷史記錄爲空,我可以排除這一點並返回數組。 –

1

你應該閱讀再次LEFT JOIN和INNER JOIN的區別,也必須改變地方標準。你不需要通過<>兩次檢查。如果日期對於將日期轉換爲日期格式非常重要,然後再進行檢查。性能會提高。

0
SELECT st.id, st.firstName, st.lastName, st.email, st.lastLogin, st.phone, st.gender, sa.title,bra.Title as brand, ss.SaleDate, teh.sDate, sa.imageUrl, sa.guid, st.mallId 
    FROM dbo.Users st 
    INNER JOIN KEY_SalesToUsers ss ON (st.ID=ss.userID) 
    INNER JOIN Sales sa ON (sa.ID=ss.SaleID) 
    INNER JOIN Brands bra ON (sa.BrandID=bra.ID) 
    LEFT OUTER JOIN dbo.UserEmailHistory teh ON st.id = teh.userId 
    WHERE CONVERT(date,DATEADD(day,1,ss.SaleDate))=CONVERT(date,getdate()) 
    AND IsNull(sDate, '') = '' OR CONVERT(date,DATEADD(day,14,teh.sDate))=CONVERT(date,getdate()) 
    ORDER BY ss.SaleDate DESC