SQL:获取每组最频繁的值

Hor*_*e92 3 mysql sql database ms-access

假设我有一个包含两列( Time 'hh:mm:ss' , Value )的表( MS-ACCESS / MYSQL ),我想为每组行获取最频繁的值。

例如我有

Time    | Value
4:35:49 | 122
4:35:49 | 122
4:35:50 | 121
4:35:50 | 121
4:35:50 | 111
4:35:51 | 122
4:35:51 | 111
4:35:51 | 111
4:35:51 | 132
4:35:51 | 132
Run Code Online (Sandbox Code Playgroud)

我想获得每次最频繁的价值

Time    | Value
4:35:49 | 122
4:35:50 | 121
4:35:51 | 132
Run Code Online (Sandbox Code Playgroud)

提前致谢

备注 我需要获得与此Excel 解决方案相同的结果:获取每个组的最频繁值

** 我的 SQL 解决方案 **

我找到了一个可以在 mysql 中正常工作的解决方案(Source),但我无法在 ms-access 中使用它:

select cnt1.`Time`,MAX(cnt1.`Value`)
from (select COUNT(*) as total, `Time`,`Value`
from `my_table`
group by `Time`,`Value`) cnt1,
(select MAX(total) as maxtotal from (select COUNT(*) as total, 
`Time`,`Value` from `my_table` group by `Time`,`Value`) cnt3 ) cnt2
where cnt1.total = cnt2.maxtotal GROUP BY cnt1.`Time`
Run Code Online (Sandbox Code Playgroud)

Par*_*ait 5

考虑INNER JOIN匹配两个派生表子查询而不是与WHERE子句匹配的子查询选择语句列表。这已经在 MS Access 中进行了测试:

SELECT MaxCountSub.`Time`, CountSub.`Value`    
FROM    
     (SELECT myTable.`Time`, myTable.`Value`, Count(myTable.`Value`) AS CountOfValue
      FROM myTable
      GROUP BY myTable.`Time`, myTable.`Value`) As CountSub

INNER JOIN 

     (SELECT dT.`Time`, Max(CountOfValue) As MaxCountOfValue
      FROM
           (SELECT myTable.`Time`, myTable.`Value`, Count(myTable.`Value`) AS CountOfValue
            FROM myTable
            GROUP BY myTable.`Time`, myTable.`Value`) As dT
      GROUP BY dT.`Time`) As MaxCountSub

ON CountSub.`Time` = MaxCountSub.`Time` 
AND CountSub.CountOfValue = MaxCountSub.MaxCountOfValue
Run Code Online (Sandbox Code Playgroud)


Gou*_*lfy 1

你可以通过这样的查询来做到这一点:

select time, value 
from (select value, time from your_table 
group by value , time
order by count(time) desc
) temp where temp.value = value
group by value
Run Code Online (Sandbox Code Playgroud)