访问查询以获取+5或更多重复项

时间:2013-09-24 13:27:54

标签: sql database ms-access-2007

我对Access查询有一点问题(不要问我为什么但是我不能使用真正的SGBD而是Access) 我有一张像920k记录的大桌子 我必须循环遍历所有这些数据并获取在同一天发生超过5次的ref

table = myTable

--------------------------------------------------------------
| id  |      ref            |      date     |   C_ERR_ANO    |
--------------------------------------------|-----------------
| 1   |    A12345678        |   2012/02/24  |    A 4565      |
| 2   |    D52245708        |   2011/05/02  |    E 5246      |
| ... |    .........        |   ..../../..  |    . ....      |
--------------------------------------------------------------

所以为了恢复它,我有900000+记录 在相同的日期有重复(哦,顺便说一下,我忘了添加另一个有C_ERR_ANO作为名称的列)

所以我必须循环遍历所有这些行,根据日期和errorNumber

获取每个ref

如果有超过5次使用相同的errorNumber,我必须抓住它们并在结果中显示

我最终使用了这个查询:

SELECT DISTINCT Centre.REFERENCE, Centre.DATESE, Centre.C_ERR_ANO
FROM Centre INNER JOIN (SELECT 
    Centre.[REFERENCE],
    COUNT(*) AS `toto`,
    Centre.DATESE
    FROM Centre
       GROUP BY REFERENCE
       HAVING COUNT(*) > 5)  AS Centre_1 
       ON Centre.REFERENCE = Centre_1.REFERENCE
       AND Centre.DATESE <> Centre_1.DATESE;

但这个查询很好 我试过了

SELECT DATESE, REFERENCE, C_ERR_ANO, COUNT(REFERENCE) AS TOTAL
FROM (
    SELECT *
    FROM Centre
    WHERE (((Centre.[REFERENCE]) NOT IN (SELECT [REFERENCE] 
        FROM [Centre] AS Tmp 
            GROUP BY [REFERENCE],[DATESE],[C_ERR_ANO]
            HAVING Count(*)>1  AND [DATESE] = [Centre].[DATESE] 
            AND [C_ERR_ANO] = [Centre].[C_ERR_ANO] 
            AND [LIBELLE] = [Centre].[LIBELLE])))
        ORDER BY Centre.[REFERENCE], Centre.[DATESE], Centre.[C_ERR_ANO]) 

    GROUP BY REFERENCE, DATESE, C_ERR_ANO

仍然没有工作

我正在捣乱

1 个答案:

答案 0 :(得分:0)

您的group by子句需要包含您选择中的所有项目。为什么不使用:

  

选择Centre.DATESE,Centre.C_ERR_ANO,Count(*)

     

Group by Centre.DATESE,Centre.C_ERR_ANO   有计数(*)&gt; 5

如果您需要其他字段,则可以添加它们,只要您确保选择中的相同字段显示为组。

不知道这里的格式是怎么回事!