MySQL按状态区分的调用计数

MySQL按状态区分的调用计数,mysql,sql,duplicates,distinct,Mysql,Sql,Duplicates,Distinct,我正在尝试按状态获取唯一的呼叫计数(无重复呼叫)。例如 MO 249 OK 220 CA 216 TX 190 KS 158 下面的代码可以正常工作(没有错误),但不会删除重复 SELECT DISTINCT CallFrom, FromState, count(*) AS cnt FROM `calls` WHERE DateCreated >= CURDATE() - INTERVAL 2 YEAR AND (CallTo = '+15555555555' OR CallT

我正在尝试按状态获取唯一的呼叫计数(无重复呼叫)。例如

MO  249
OK  220
CA  216
TX  190
KS  158
下面的代码可以正常工作(没有错误),但不会删除重复

SELECT DISTINCT CallFrom, FromState, count(*) AS cnt
FROM `calls`
WHERE DateCreated >= CURDATE() - INTERVAL 2 YEAR AND
(CallTo = '+15555555555' OR CallTo = '+15555555556' )
GROUP BY FromState
ORDER BY cnt DESC 
有什么想法吗?提前谢谢

更新:请求了以下“调用”表示例

Index   CallTo          CallFrom    FromState
1       +15555555555    18166283100 MO
2       +15555555556    13307059600 OH
3       +15555555555    17722631600 FL
4       +15555555556    16173024800 MA
5       +15555555556    16173024800 MA
6       +15555555556    16175025500 MA
刚意识到我忘了包含DateCreated列,但正如我所说的,除了重复数据消除之外,其他一切都正常工作。此示例的输出将是

MA  2
MO  1
OH  1
FL  1

你的措辞不是很清楚,但我想你是说你想计算在每个州发生的来自号码的唯一呼叫数。也许有更好的方法可以做到这一点,但这会奏效。首先,它构建一个唯一CallFrom/状态组合列表,然后根据该列表(而不是原始数据)进行分组和计数:

SELECT FromState, COUNT(*) 
FROM
  (SELECT DISTINCT CallFrom, FromState 
  FROM `calls` 
  WHERE 
    (CallTo = '+15555555555' OR CallTo = '+15555555556' )
  ) c 
GROUP BY FromState
演示:

在您的案例中,什么是重复?重复呼叫。这就是你要问的吗?来自同一个人的多个电话。如果你能提供输入样本,那就太棒了。我会更新我的帖子,包括我认为你想要的内容。如果我错了,请告诉我。也许你只是想要这个(一个数字/状态组合的独特列表,没有分组和计数):?真的不清楚。这就是在这个场景中使用“DISTINCT”的方式,也是获得唯一数字列表的方式(即没有“重复”)。如果不是那样的话,你就得更详细地解释你的逻辑。好吧,这一直困扰着我。你说,“你想计算每个州发生的唯一呼叫数。”我的第一句话是,“我正试图按州获得唯一呼叫数(无重复呼叫)。”为了避免将来出现这种失礼,有什么区别?对不起,你确实说过,这是真的。我想这是关于“重复数据消除”等示例数据附近的问题的后半部分,我一直在集中精力,并开始让我感到困惑。你的描述也没有完全阐明什么是“被骗电话”。定义这一点的方法可能不止一种,而不仅仅是两次接到同一号码的电话。但是,是的,我可以更快地理解它。