Sql 计算两个表中的不同记录

Sql 计算两个表中的不同记录,sql,count,distinct,ms-access-2003,Sql,Count,Distinct,Ms Access 2003,关于在SQL中计算两个表中字段的唯一组合的问题。 MSaccess 2003 table1: id, fld1, fld2 table2: id, dateAndTime Select TOP 5 theDay, count(*) AS theCount FROM ( Select cdate(int(date_col)) As theDay From tbl1 Inner Join tbl2 on tbl1.id=tbl2.id Group By cdate(int(date_col

关于在SQL中计算两个表中字段的唯一组合的问题。 MSaccess 2003

table1: id, fld1, fld2
table2: id, dateAndTime
Select TOP 5 theDay, count(*) AS theCount 
FROM ( 
Select cdate(int(date_col)) As theDay 
From tbl1 Inner Join tbl2 on tbl1.id=tbl2.id 
Group By cdate(int(date_col)), fld1, fld2 
) As X 
Group By theDay 
Order By 2 Desc; 
id不是唯一的;表跨id连接

我需要一个计数,按日期dd/mm/yy-忽略fld1和fld2 int的不同组合的时间

更具体地说,我需要知道哪一个日期具有最明显的fld1和fld2组合

如果表1中有

1, 101, 101 2, 101, 101 3, 101, 101 4, 101, 102 5, 101, 102 6, 101, 103 但我只需要12/2/2010,3输出,因为我只需要最大计数的日期和计数

无法在下面的命令中找到正确答案的格式-因此这里是MS Access 2003

table1: id, fld1, fld2
table2: id, dateAndTime
Select TOP 5 theDay, count(*) AS theCount 
FROM ( 
Select cdate(int(date_col)) As theDay 
From tbl1 Inner Join tbl2 on tbl1.id=tbl2.id 
Group By cdate(int(date_col)), fld1, fld2 
) As X 
Group By theDay 
Order By 2 Desc; 

这将按日期返回前5个组合,而不考虑任何时间值。在现代RDBMS中,您可以一次计算不同的组合:

SELECT date_col, count(DISTINCT (fld1, fld2)) AS unique_combos
FROM   tbl1
JOIN   tbl2 USING (id)
GROUP  BY date_col;
如果不起作用,则分两步使用更简单的方法:

SELECT date_col, count(*) AS unique_combos
FROM  (
   SELECT date_col
   FROM   tbl1
   JOIN   tbl2 ON tbl1.id = tbl2.id
   GROUP  BY date_col, fld1, fld2
   ) AS x
GROUP  BY date_col;
第二个也可以在MS Access中使用

@user2184214最终得到了什么:

SELECT TOP 5 theDay, count(*) AS theCount
FROM  (
   SELECT cdate(int(date_col)) AS theDay
   FROM   tbl1 
   JOIN   tbl2 ON tbl1.id = tbl2.id
   GROUP  BY cdate(int(date_col)), fld1, fld2
   ) AS x
GROUP  BY theDay
ORDER  BY 2 DESC;

此查询提供您想要的内容:

SELECT
  date(dateAndTime) AS date,
  count(DISTINCT (fld1, fld2)) AS count
FROM table1
JOIN table2 ON table1.id = table2.id
GROUP BY 1
HAVING count(DISTINCT fld1, fld2) > 1
ORDER BY 2 DESC

对不起,这是我第一次在stackoverflow上发帖,但是我已经用过很多次了。我尝试过很多方法,但对agreegate函数等错误认识模糊。我是一个非常简单的SQL用户,只知道连接和选择以及where子句的基本知识。请记住提供您的数据库系统和版本。不同口味之间的日期/时间处理差异很大。请编辑您的问题。对于MSAccess2003,这会导致查询表达式“countDistinct fld1,fld2”中缺少运算符的语法错误。好的-解决了这个问题。。。谢谢这太令人困惑了。选择前5天,将*作为计数从选择cdateintdate\u col作为计数从tbl1内部连接tbl2到tbl1。id=tbl2.id按cdateintdate\u col分组,fld1、fld2按2描述的日期顺序按X分组;这将按日期返回前5个组合,不考虑任何时间value@user2184214:酷我在答案中添加了最终解决方案的格式化版本。也许再加上count*>1,就可以用一个组合剔除日期了?考虑删除你先前的评论,这些评论被你的最后一个取代。