-1

SQLの2つのテーブルにわたるフィールドの一意の組み合わせのカウントに関する質問。MSaccess2003。

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

idは一意ではありません。テーブルは「id」間で結合されます。

fld1fld2(int)の明確な組み合わせの日付(dd / mm / yy-時間を無視)によるカウントが必要です。

具体的には、との組み合わせが最も明確な日付を知る必要がfld1ありfld2ます。

table1に

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

そして表2は

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

私は欲しい

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

ただし、最大カウントの日付とカウントが必要なだけなので、「2010年12月2日、3」の出力のみが必要です。

以下の正しい答えへのコメントでこれをフォーマットする方法を理解できませんでした-それで、これはMSAccess2003用です。

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;

それが機能しない場合は、2つのステップでより簡単な方法:

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;

2つ目はMSAccessでも機能するはずです。

@ 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 に答える