我有一个表,在同一个日期有一些重复的值
MyTime | Mrc | Num
21-Dec | ABC | 200
21-Dec | ABC | 200
20-Dec | DEF | 300
20-Dec | DEF | 300
19-Dec | XYZ | 254
21-Nov | ABC | 200
我想忽略DATE(Mytime), Mrc, Num
的重复条目和组,即我想检测当月同一天的条目,Mrc&Num出现不止一次但不完全重复
所以预期的输出是:
MyTime | Mrc | Num | cnt
21 | ABC | 200 | 2
我尝试了以下几点:
SELECT DISTINCT(MyTime, Mrc, Num, Count(*) as cnt)
FROM `My_Table`
WHERE MType != 'XX'
AND HType != 'YY'
GROUP BY Date(MyTime), Mrc, Num
ORDER BY MyTime DESC
但它没有用。
使用COUNT(DISTINCT MyTime)
:
SELECT
DAY(MyTime) as MyTime
Mrc,
Num,
COUNT(DISTINCT MyTime) as cnt
FROM `My_Table`
WHERE MType != 'XX'
AND HType != 'YY'
GROUP BY 1, 2, 3
ORDER BY 1 DESC
笔记:
DAY()
函数,而不是DATE()
函数来提取日期的日期部分DISTINCT
是一个关键字,而不是一个函数,所以避免使用括号,即使用它如下:SELECT DISTINCT column1, column2, ...
COUNT(DISTINCT expression)
返回不同值的数量