2014-04-14 43 views
-1

說我有一個類型爲dateTime的值爲「2014-04-14 12:17:55.772」的列&我需要從中減去秒「2」秒才能獲得像這樣的「12:17:53」o/p。如何從postgres日期時間中減去秒數而不必將其添加到group by子句中?

userid EndDate     seconds 
-------------------------------------------------------- 
1 "2014-04-14 12:17:14.295" 512 
1 "2014-04-14 12:31:14.295" 12 
2 "2014-04-14 12:48:14.295" 2 
2 "2014-04-14 13:22:14.295" 12 

&查詢是

select (enddate::timestamp - (seconds* interval '1 second')) seconds, userid 
from user 
group by userid 

現在我需要組由用戶標識僅但結束日期&秒添加到選擇查詢時問我by子句這不會給我將其添加到組正確的o/p。

我期待這種格式的數據,我需要計算從end_time &開始花費的start_time。

user : 1 

    start_time   end_time  total (seconds) 
     "12:17"   "12:17"    1 
     "12:22"   "12:31"   512 
             total: 513 
    user : 2 
     "12:43"   "12:48"   288 
     "13:22"   "13:22"   1 
             total 289 

有沒有什麼方法可以避免group by子句?

+0

那麼你想要多個userid的'enddate'?你需要選擇*一個*,否則你的'group by'沒有任何意義 –

+0

我更新了我的預期o/p票。 – user1298426

+2

'GROUP BY user_id'並不意味着「把一個'user_id'的所有記錄放在一起'(這可能是'ORDER BY user_id'),這意味着」每個'user_id'只返回一行「。 – IMSoP

回答

0

像@IMSoP說,你可以使用一個窗口功能,目前共包括爲每個用戶在查詢輸出:

SELECT userid 
    , (enddate - (seconds * interval '1 second')) as start_time 
    , enddate as end_time 
    , seconds 
    , sum(seconds) OVER (PARTITION BY userid) as total 
    FROM so23063314.user; 

那麼只顯示你感興趣的該行的部分每個小計行,並在每個塊的結尾處顯示總計。