2015-04-30 24 views
0

我想在PostgreSQL中獲取MAX(SUM()),這在PostgreSQL中是不可能的。我試圖通過任何方法獲得結果,但無法獲得理想的結果。我的表是這樣的 -如何計算postgresql中的MAX(SUM()),尤其是查詢

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

問題是我不能選擇全部三個USER_ID,MAX(),沒有GROUP日期按日期和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

等,但不過不管試圖無法得到我想要的結果。 任何人都可以幫助我如何得出結果嗎? 感謝

回答

0

該查詢會給你你想要什麼:

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; 
0

聚集在一個子查詢和外部使用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

+0

Clodoaldo Neto,我試過你這樣的查詢'SELECT DISTINCT ON(1,2)date,user_id,credit_rupee from( SELECT user_id,date,MAX(sum)as credit_rupee FROM( SELECT SUM(credit_rupee),user_id, DATE(created_at)FROM user_transactions WHERE status = 3 GROUP BY user_id,DATE(created_at)ORDER BY DATE(created_at))as m GROUP BY 1,2)as x order by date,user_id,credit_rupee desc'但它的類似什麼,我已經試過我沒有在這個問題 – vrOom

+0

像這種'選擇日期,USER_ID此之前提到其中,MAX從( \t SELECT MAX(總和),USER_ID,日期FROM( \t \t SELECT SUM(credit_rupee) user_id,DATE(created_at)FROM user_transactions \t \t GROUP BY user_id,DATE(created_at)ORDER BY DATE(created_at))as m \t GROUP BY DATE,user_id ORDER BY date)as x' does not fetch the result as required – vrOom