-1

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

table1: id, fld1, fld2
table2: id, dateAndTime

id 不是唯一的;表通过“id”连接。

我需要按日期(dd/mm/yy - 忽略时间)计算fld1fld2(int)的不同组合。

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

如果 table1 有

1, 101, 101
2、101、101
3, 101, 101
4、101、102
5、101、102
6、101、103

表2有

1,2010 年 12 月 1 日
2,2010 年 12 月 1 日
3,2010 年 12 月 1 日
1,2010 年 12 月 2 日
2, 2010 年 12 月 2 日
4, 2010 年 12 月 2 日
5,2010 年 12 月 2 日
6 日,2010 年 12 月 2 日

我需要

12/1/2010, 1     'only 1 unique combinatin of fld1 and fld2
12/2/2010, 3     'only 3 unique combinations of fld1 and fld2

但我只需要“12/2/2010, 3”输出,因为我只需要最大计数的日期和计数。

无法弄清楚如何在下面的正确答案的评论中格式化它 - 所以这里适用于 MS Access 2003。

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 个组合(不考虑任何时间值)

4

2 回答 2

0

在现代 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;
于 2013-03-18T23:04:11.777 回答
0

此查询为您提供所需的内容:

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
于 2013-03-19T00:18:19.930 回答