2015-10-07 62 views
0

我試圖從用戶的初始日期到當前日期添加時間(小時分鐘和秒),但我收到了錯誤。從一個時間戳字段添加時間到其他字段

我不知道我做錯了,接受其他的建議

select distinct uid, 
     min (ts) over (partition by uid order by ts rows unbounded preceding) as initial_date, 
     current_date-2 + interval 'to_char(min (ts) over (partition by uid order by ts rows unbounded preceding),'HH') hours' 
    from mr_session_log 
where ts >= '2015-09-01' 

這個錯誤,我recevied

ERROR: syntax error at or near "') hours'" 

的位置:355

current_date-2 + interval 'to_char(min (ts) over (partition by uid order by ts rows unbounded preceding),'HH') hours', 
                              ^
+0

CURRENT_DATE-2?這是一個標識符名稱,或者你是否試圖從該領域中減去某些東西?此外,語法突出顯示在提示錯誤信息方面做得很好,但仍應始終發佈錯誤消息。 –

+0

嗨,我已經添加了錯誤,current_date - 2從current_date減少2天 – user3600910

回答

0

你不應該過度工程解決方案,語法高亮清楚地表明你不能在間隔和那裏放置函數當你想通過uid區分uid和分區時,不需要窗口函數。

SELECT uid, (current_date -2) + min(ts::time) 
FROM mr_session_log 
WHERE ts >= '2015-09-01' 
GROUP BY uid 
ORDER BY uid; 
+0

我可以做到這一點與Windows功能,因爲我有更多的字段在選擇? – user3600910

+0

@ user3600910當然,最重要的部分是日期/時間操作,對吧?你應該能夠找出其他問題。 –

+0

我試圖改變它,但它不起作用 – user3600910

0

如果你真的需要使用窗口功能,也相當簡單:

SELECT DISTINCT 
    uid, 
    CURRENT_DATE - 2 - MIN(ts::time) OVER (PARTITION BY uid 
            ORDER BY ts 
            ROWS UNBOUNDED PRECEDING) AS date_with_added_time 
FROM mr_session_log 
WHERE ts >= '2015-09-01'::DATE; 

如果您只需要小時和分鐘,secconds使用MIN(date_trunc('secconds', ts)::time)代替MIN(ts::time)

+0

我需要的是添加時間current_date -2爲什麼我使用to_chat – user3600910

+0

@ user3600910我更正了我的答案 - 如果毫秒毫無用處,您只需將'timestamp'施加到'time'或使用'date_trunc(text,timestamp)'' –

相關問題