如何在 postgresql 中计算 MAX(SUM()) 特别是在下面查询

How to calculate MAX(SUM()) in postgresql in particular to query below

我正在尝试在 PostgreSQL 中获取 MAX(SUM()),这在 PostgreSQL 中是不可能的。我试图通过任何方法得到结果,但无法得到想要的结果。我的 table 是这样的 -

CREATE TABLE user_transactions (
    id integer NOT NULL,
    user_id bigint,
    credit_rupee numeric,
    created_at timestamp without time zone,
);

这是样本数据

id      credit_rupee user_id    date 
1       30           72873      2015-03-25
2       10           76296      2015-03-25 
3       3            73130      2015-03-26 
4       2            73142      2015-03-26 
5       8.44         73145      2015-03-26
6       2            72911      2015-03-26 
7       5            73158      2015-03-26
8       10           73067      2015-03-26
9       2            76296      2015-03-26
10      1            76296      2015-03-27
11      5.5          73042      2015-03-27
12      2            73042      2015-03-27

在此,我想获得特定日期总和 credit_rupee 最高的用户。

我想要的结果是

user_id  max date
72873    30  2015-03-25
73067    10  2015-03-26
73042    5.5 2015-03-27

问题是我不能 select 所有三个 user_id,max(),date 没有 GROUP BY date 和 user_id 这使得很难得到上面提到的结果。

我试过很多组合,比如

SELECT MAX(sum),user_id,date FROM(
    SELECT SUM(credit_rupee),user_id,DATE(created_at) FROM user_transactions 
    GROUP BY user_id,DATE(created_at) 
    ORDER BY DATE(created_at)) as m 
GROUP BY date ORDER BY date;

SELECT DISTINCT(user_id),max,date from(
    SELECT MAX(sum),user_id,date FROM(
        SELECT SUM(credit_rupee),user_id,DATE(created_at) FROM user_transactions
        GROUP BY user_id,DATE(created_at) ORDER BY DATE(created_at)) as m 
    GROUP BY DATE,user_id ORDER BY date) as x 
GROUP BY date,user_id

等等,但是无论怎样尝试都得不到我想要的结果。 任何人都可以帮助我如何得出结果吗? 谢谢

在子查询中聚合并在外部使用distinct on

select distinct on (1, 2)
    date, user_id, credit_ruppe
from (
    select user_id, date, sum(credit_ruppe) as credit_ruppe
    from sample s
    group by 1, 2
) s
order by date, user_id, credit_ruppe desc

http://www.postgresql.org/docs/current/static/sql-select.html#SQL-DISTINCT

此查询将为您提供您想要的信息:

SELECT user_id,
       credit_rupee,
       created_at from
  (SELECT
     rank() OVER (PARTITION BY created_at ORDER BY credit_rupee DESC) AS rank,
     user_id, credit_rupee, created_at
     FROM user_transactions ) sq
WHERE rank=1;