2015-11-06 54 views
0

我有一个选择查询从表中提取客户名称和购买日期。我的目标是仅为那些订购了多个不同日期的客户选择这些名称和日期。我的代码如下:MS-Access:HAVING子句不返回任何记录

SELECT Customer, PurchDate 
FROM (SELECT DISTINCT PurchDate, Customer 
     FROM (SELECT CDate(FORMAT(DateAdd("h",-7,Mid([purchase-date],1,10)+""+Mid([purchase-date],12,8)), "Short Date")) AS PurchDate, 
       [buyer-name] AS Customer 
      FROM RawImport 
      WHERE sku ALIKE "%RE%")) 
GROUP BY Customer, PurchDate 
HAVING COUNT(PurchDate)>1 
ORDER BY PurchDate 

即使有许多客户拥有多个购买日期,这也不会返回任何结果。内部的两个选择完美地工作,并为每个客户返回一组不同的日期,所以我相信我的GROUP/HAVING/ORDER子句中有一些问题。

在此先感谢您的帮助!

+0

是什么,当你删除HAVING子句的结果客户的名单? – DanK

+0

从内部选择中获得的所有相同信息,只是因为我的选择和ORDER BY的顺序而有所不同。 – MichaelV

回答

1

您在正在做内部的选择

SELECT DISTINCT PurchDate, Customer 

,并在outter选择

GROUP BY Customer, PurchDate 

意思都是

having count(*) = 1 

我不能给你访问的确切sintaxis但你需要像这样的东西

我将使用YourTable作为替代你内心的衍生化表,以方便阅读

SELECT DISTINCT Customer, PurchDate 
FROM YourTable 
WHERE Customer IN (
        SELECT Customer 
        FROM (SELECT DISTINCT Customer, PurchDate 
          FROM YourTable) 
        GROUP BY Customer 
        HAVING COUNT(*) > 1 
       ) 
  • 内选择会给你一个以上的天,其客户订单。
  • 外部选择将在那些日子为您带来那些客户。

也许你可以尝试一些简单的了解谁在超过一天带来了这样

SELECT [buyer-name] 
FROM RawImport 
WHERE sku ALIKE "%RE%" 
GROUP BY [buyer-name] 
HAVING Format(MAX(purchase-date,"DD/MM/YYYY")) <> 
     Format(MIN(purchase-date,"DD/MM/YYYY")) 
+0

您的意思是GROUP BY客户只能在外部选择?然后我得到PurchDate不是聚合函数的一部分的错误 – MichaelV

+0

我明白你对SELECT DISTINCT的含义。我试着写代码,而它'选择客户,PurchDate FROM(SELECT PurchDate,客户 FROM(SELECT CDATE(FORMAT(DATEADD( “H”, - 7,MID([购置日期],1,10 )+”“+ MID([购置日期],12,8)), “短日期”))AS PurchDate,[买方名称]随着客户 FROM RawImport WHERE SKU一点通 “%FR%”) GROUP BY PurchDate,Customer) GROUP BY Customer,PurchDate HAVING COUNT(PurchDate)> 1 ORDER BY PurchDate'但我仍然得到相同的无记录结果。 – MichaelV

+1

我添加另一个技巧来简化您的代码。 –