简体   繁体   English

postgresql 如何显示每天最频繁的值

[英]postgresql How show most frequent value per day date

I've got a problem with a query that is supposed to return the value which occur most per date我遇到了一个查询问题,该查询应该返回每个日期出现最多的值

+------------+------------------+
|    Date    |      value       |
+------------+------------------+
| 2020-01-01 | Programmer       |
| 2020-01-02 | Technician       |
| 2020-01-03 | Business Analyst |
+------------+------------------+

So far I have done到目前为止我已经完成了

select count(headline) as asd, publication_date, employer -> 'name' as dsa from jobhunter
group by publication_date,dsa
ORDER BY publication_date  DESC

But it shows 2020-12-31 19:06:00 instead of just YYYY-MM-DD Any idea on how to fix this?但它显示 2020-12-31 19:06:00 而不仅仅是 YYYY-MM-DD 关于如何解决这个问题的任何想法? enter image description here在此处输入图像描述

Test data:测试数据:

create table tbl (
    id serial primary key,
    row_datetime TIMESTAMP,
    row_val VARCHAR(60)
);

insert into tbl (row_datetime, row_val) values ('2021-01-01 00:00:00', 'a');
insert into tbl (row_datetime, row_val) values ('2021-01-01 01:00:00', 'a');
insert into tbl (row_datetime, row_val) values ('2021-01-01 02:00:00', 'b');
insert into tbl (row_datetime, row_val) values ('2021-01-02 00:00:00', 'a');
insert into tbl (row_datetime, row_val) values ('2021-01-02 01:00:00', 'b');
insert into tbl (row_datetime, row_val) values ('2021-01-02 02:00:00', 'b');

Example query:示例查询:

SELECT dt, val, cnt
FROM (
   SELECT dt, val, cnt, ROW_NUMBER() OVER (PARTITION BY dt ORDER BY cnt DESC) AS row_num
   FROM (
      SELECT dt, val, COUNT(val) AS cnt
      FROM (
         SELECT DATE(row_datetime) AS dt, row_val AS val FROM tbl
      ) AS T1 GROUP BY dt, val
   ) AS T2
) AS T3
WHERE row_num=1
ORDER BY dt ASC

You can additionally customize your query to optimize the performance, get more fields, etc.您还可以自定义查询以优化性能、获取更多字段等。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM