首页 > 解决方案 > SQL:选择对应于不同列的最常出现的值

问题描述

有人可以为我的问题指出正确的解决方案。我有一张桌子-

+------+-------+--------------------------------------+
| id   | num   | date                                 |
+------+-------+--------------------------------------+
| a    | 1     | 2011-08-12T20:17:46.384Z             |
| a    | 1     | 2011-08-12T20:18:46.384Z             |
| a    | 2     | 2011-08-12T20:19:46.384Z             |
| a    | 2     | 2011-09-12T20:17:46.384Z             |
| c    | 3     | 2011-09-12T20:18:46.384Z             |
+------+-------+--------------------------------------+

现在对于给定的日期范围,我想获取列“num”中出现次数最多的值,作为“id”值。

范围(2011-08-12T00:00:00.000Z 到 2011-08-12T23:59:00.000Z)的结果应该是

| a    | 1     | 090518                               |

基本上,我想要与给定日期时间范围内的 id 对应的列中出现次数最多的值。

我将使用 PostgreSQL。

标签: sqlpostgresql

解决方案


这对你有什么作用?

 select max(c.id) id, c.num, c.cnt  from 
(select id, max(cnt) cnt from (
Select id, num, count(*) cnt 
from #temp 
group by id, num)a  group by id)b 
join 
(Select id, num, count(*) cnt 
from #temp 
group by id, num)c on b.id=c.id and b.cnt=c.cnt
group by c.num, c.cnt 

推荐阅读