2017-03-08 25 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