SQL查询字段出现次数且过滤重复数据,该如何解决

SQL查询字段出现次数且过滤重复数据
已知表T1 结构如下其中ID为自增主键
   
 ID(Int),BarCode(varchar),TestTime(datatime),TestResult(varchar)

     1,                     111,         2015-03-13 13:30:30 ,         F
     2,                     111,          2015-03-13 13:20:20 ,        F
     3,                     222,          2015-03-13 13:40:33 ,        F
     4,                     111,          2015-03-15 09:00:00 ,        F
     5,                      222,         2015-03-13 13:40:33 ,        F
     6,                      222,         2015-03-13 13:40:33 ,        F

查询BarCode出现次数大于2且TestResult=F的记录BarCode信息
表中可以发现 ID为3, 5 ,6记录为重复记实录视为一条记录

要求输出显示
  1,    111     
 
------解决思路----------------------
要求输出显示
  1,    111 

这边的前面的这个1是什么意思呢,是最小的那个id,还是行号这样的1 2 3 呢
------解决思路----------------------
用 distinct 去除重复 ,然后在去重复后的临时表里边加上 分组汇总判断,数量>1的取出值就可以了
------解决思路----------------------
SELECT BarCode
FROM(SELECT BarCode,TestTime,TestResult FROM T1 GROUP BY BarCode,TestTime,TestResult)T
GROUP BY BarCode
HAVING COUNT(1)>2
类似这样,即可
------解决思路----------------------
SELECT BarCode,COUNT(1)
FROM(SELECT BarCode,TestTime,TestResult FROM T1 GROUP BY BarCode,TestTime,TestResult)T
GROUP BY BarCode
HAVING COUNT(1)>2

------解决思路----------------------
引用:
Quote: 引用:

SELECT BarCode,COUNT(1)
FROM(SELECT BarCode,TestTime,TestResult FROM T1 GROUP BY BarCode,TestTime,TestResult)T
GROUP BY BarCode
HAVING COUNT(1)>2

我尝试了输出TestTime 也尝试了用Left Join 都无法实现效果
相同的BarCode,有三个时间,你是要取哪个呢
最大的那个,还是三个都要显示?
------解决思路----------------------
SELECT BarCode,MAX(TestTime),Count(*) as cut
FROM(SELECT BarCode,TestTime,TestResult FROM T1 GROUP BY BarCode,TestTime,TestResult)T
GROUP BY BarCode
HAVING COUNT(1)>2 
这样即可,加个时间的聚合

另外,你也起得早,同是早起的人,共勉~~
------解决思路----------------------

select T1.BarCode,T1.TestTime,T2.Times
from T1,(select BarCode,MAX(TestTime) TestTime,Count(1) Times from T1 where TestResult='F' GROUP BY BarCode Having COUNT(1)>2) T2
where T1.BarCode=T2.BarCode and T1.TestTime=T2.TestTime

------解决思路----------------------

select T1.ID,T1.BarCode,T1.TestTime,T2.Times
from T1,(select BarCode,MAX(TestTime) TestTime,Count(1) Times from T1 where TestResult='F' GROUP BY BarCode Having COUNT(1)>2) T2
where T1.BarCode=T2.BarCode and T1.TestTime=T2.TestTime

------解决思路----------------------
没太明白,要不结合顶楼的数据,说下想要的效果
------解决思路----------------------
因为,你这是需要聚合后的需求,聚合后,多一个列和少一列上的SQL聚合出来的结果是不一样的

你的表的数据需要用到哪些列,理一下你要得到什么样的结果,如果你理清楚后,我可以帮你定位出来

另外你的SQL版本是多少呢?
------解决思路----------------------
SELECT BarCode,TestTime,TestResult,TesterID,CUT FROM(
SELECT BarCode,TestTime,TestResult,TesterID
,Count(1)OVER(PARTITION BY BarCode) AS CUT
,ROW_NUMBER()OVER(ORDER BY TestTime DESC)RN
FROM(SELECT BarCode,TestTime,TestResult,TesterID
FROM T1
WHERE TestResult='F'
GROUP BY BarCode,TestTime,TestResult,TesterID
)T2
)T3
WHERE CUT>2 AND RN=1
你试下这个
------解决思路----------------------
SELECT BarCode,TestTime,TestResult,TesterID,CUT FROM(
SELECT BarCode,TestTime,TestResult,TesterID
,Count(1)OVER(PARTITION BY BarCode) AS CUT
,ROW_NUMBER()OVER(ORDER BY ID)RN
FROM(SELECT MIN(ID)ID,BarCode,TestTime,TestResult,TesterID
FROM T1
WHERE TestResult='F'
GROUP BY BarCode,TestTime,TestResult,TesterID
)T2
)T3
WHERE CUT>2 AND RN=1
调整一下
------解决思路----------------------
/* 测试数据
WITH T1(ID,BarCode,TestTime,TestResult,TesterID) AS (
    SELECT 1,'111','2015-03-13 13:30:30','F','a01' UNION ALL
    SELECT 2,'111','2015-03-13 13:20:20','F','a01' UNION ALL
    SELECT 3,'222','2015-03-13 13:40:33','F','b02' UNION ALL
    SELECT 4,'111','2015-03-15 09:00:00','F','b03' UNION ALL
    SELECT 5,'222','2015-03-13 13:40:33','F','b02' UNION ALL
    SELECT 6,'222','2015-03-13 13:40:33','F','b02'
) */
    SELECT D.*
      FROM ( -- BarCode出现次数大于2且TestResult=F
                SELECT BarCode
                  FROM T1
                 WHERE TestResult = 'F'
              GROUP BY BarCode
                HAVING COUNT(DISTINCT TestTime) > 2 -- 这里简单地用TestTime区分重复
            ) S
CROSS APPLY ( -- 每个BarCode分别取TestTime最大的一条明细
                SELECT TOP 1 *
                  FROM T1
                 WHERE BarCode = S.BarCode
              ORDER BY TestTime DESC
            ) D

         ID BarCode TestTime            TestResult TesterID
----------- ------- ------------------- ---------- --------
          4 111     2015-03-15 09:00:00 F          b03