我有下表,我需要计算总行数而不包括任何重复记录。
CustomerID
test1
test1
test2
test3
test4
test4
如您所见,行总数为6,但有两个test1和两个test4,我希望查询返回4. IOW,我想计算CustomerID
中的唯一值。
我尝试了子查询,但没有让它为我工作。
- 更新27/06/2012 -
谢谢,两人都为我工作:
- SELECT COUNT(*)FROM(选择CustomerID FROM TheTable GROUP BY CustomerID)为
- SELECT COUNT(*) 从 ( 从TheTable中选择DISTINCT CustomerID )AS sub;
醇>
我现在需要一个查询来保留今天添加的那些CustomerID,然后计算它们。
例如,
CustomerID DateAdded
test1 25/06/2012
test1 25/06/2012
test2 26/06/2012
test3 27/06/2012 - Today
test4 27/06/2012 - Today
test4 27/06/2012 - Today
然后它需要返回3.
我已经尝试将以下查询添加到提供的两个解决方案中,但无法让它们中的任何一个工作/返回我想要的值。
HAVING(([TheTable] .DateAdded)= Date());
答案 0 :(得分:4)
这可以在SQL中工作,我认为它也应该在Access中:
SELECT COUNT(DISTINCT CustomerID) FROM TheTable
编辑:根据评论中的Jeff,Access不支持上述语法。
这应该可以肯定:
SELECT COUNT(*) FROM ( SELECT CustomerID FROM TheTable GROUP BY CustomerID ) a
按日期限制
SELECT COUNT(*) FROM (
SELECT TheTable.CustomerID FROM TheTable GROUP BY CustomerID
WHERE TheTable.DateAdded >= Date()
) a
答案 1 :(得分:3)
dbaseman的回答中的第二个建议对我来说是正确的。这种替代方案也应该有效。
SELECT COUNT(*)
FROM
(
SELECT DISTINCT CustomerID FROM TheTable
) AS sub;
我不知道它是否比dbaseman GROUP BY
提供任何优势。如果您决定测试这两种方法,请添加评论以告诉我们您找到的内容。
根据您的评论,您想要评估“仅限那些今天添加的记录”。由于您没有向我们提供有关您的表的足够信息,我将假装它包含名为date_added
的日期/时间字段。每次添加记录时,都会在该字段中存储当前日期,时间组件为午夜。在这种情况下,您可以向子查询添加WHERE
子句,以要求db引擎仅考虑date_added
等于今天日期的那些行。 Date()
函数将为您提供今天的日期,午夜作为时间组件。
SELECT COUNT(*)
FROM
(
SELECT DISTINCT CustomerID FROM TheTable
WHERE date_added = Date()
) AS sub;
使用您的字段名称替换date_added
后,如果我的假设是正确的,这应该可行。但是,如果您的date_added
值包含midnite以外的任何时间组件,则必须修改WHERE
子句以从今天开始捕获所有日期/时间值。
WHERE date_added >= Date() AND date_added < (Date() + 1)