2015-10-07 2 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

текущая_дата-2? Это имя идентификатора или вы пытаетесь вычитать что-то из этого поля? Также подчеркивание синтаксиса делает хорошую работу, предлагая, что не так, но все же вы всегда должны публиковать сообщение об ошибке. –

+0

привет, я добавил ошибку, current_date - 2, уменьшая 2 дня от current_date – 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)', если миллисекунды бесполезны –

Смежные вопросы