2015-05-14 43 views
-1

我需要找到日期,當每個用戶支付的金額超過100美元。我有以下格式的表:找到銷售ID達到一定水平的日期

+----------------------------------------+------------+----+ 
|  pay_date, user_id, transaction_sum |   | | 
+----------------------------------------+------------+----+ 
|  01/01/14, A1,  $2    |   | | 
|  01/01/14, A2,  $5    |   | | 
|  01/01/14, B1,  $10    |   | | 
|  03/01/14, A1,  $2    |   | | 
|  03/01/14, B1,  $2    |   | | 
|  03/01/14, C1,  $5    |   | | 
|  04/01/14, A3,  $2    |   | | 
|  04/01/14, A3,  $20    |   | | 
|  04/01/14, C1,  $5    |   | | 
+----------------------------------------+------------+----+ 
    ... 

(ordered by pay_date) 

我想結果,有一個像這樣的表:

user_id, pay_date 
A1,  03/03/14 
A2,  30/03/14 
A3,  22/05/14 
B1,  01/01/15 
C1,  12/10/14 

的一些用戶支付資金累計總金額將超過$ 100,但是我需要超過它的日期。對於其他用戶,它不會超過,我不需要他們在表中。

道歉,如果我沒有解釋這顯然不夠 感謝

+0

您正在使用哪個數據庫管理系統? (日期/時間功能通常是特定於產品的。) – jarlh

+0

到目前爲止,您自己做了什麼?任何努力? –

+0

@jarlh TransactSQL如果我正確理解你的問題(Amazon Redshift) –

回答

2

AFAIK紅移支持窗口化聚合函數:

SELECT user_id, MIN(pay_date) 
FROM 
(
    SELECT pay_date, user_id, 
     SUM(transaction_sum) -- cumulative sum based on pay_date 
     OVER (PARTITION BY user_id 
      ORDER BY pay_date 
      ROWS UNBOUNDED PRECEDING) AS cum_sum 
    FROM tab 
) AS dt 
WHERE cum_sum > 100 -- only rows where cumulative sum exceeds limit 
GROUP BY user_id 
+0

非常感謝你,這是非常優雅的解決方案!我後悔我的名聲不讓我投票 –

0

您的例子是什麼,是不是完全按照你的問題問。

如果你想你的榜樣,那麼你可以簡單地做

select user_id, pay_date from TABLE where transaction_sum > 100; 
+0

謝謝你的回答,dnoeth給出了非常有用的建議 –