У меня есть таблица данных, которая находится в метке времени с форматом часового пояса (называется «время»). У меня также есть пустая таблица, которая принимает значения типа данных интервала. Для каждой строки в пустой таблице я хочу вставить разность интервалов между меткой времени этой строки в исходных данных и общим минимальным значением временной метки в исходных данных. Я пытаюсь сделать что-то вроде этого:Получите разницу каждого значения от общего минимального значения в Postgres
INSERT INTO
time_pyramid
SELECT
"time" - MIN("time")
FROM
time_raw;
Но он говорит мне «ОШИБКА: колонка„time_raw.time“должен появиться в GROUP BY оговорки или использоваться в агрегатной функции». Я знаю, что я хочу, чтобы разница между интервалами между значениями временной метки и минимальной отметки таблицы была минимальной, а «время» не будет иметь повторяющиеся значения из этого интервала, поэтому я действительно не думаю, что я должен использовать GROUP BY в этом контексте , Я также не вижу причин использовать функцию агрегации в первом «времени», так как я могу исправить свой запрос, чтобы отразить то, что я хочу?
Edit: На самом деле, «Получить каждое значение в качестве своего интервала отличия от мин» является лучшим названием для этого вопроса
Wow я думаю, мне придется читать функции окна. Спасибо, это то, что мне нужно. – Ben
Обратите внимание, что 'min (" time ") over()' синтаксически неделимо. Используйте '(extract (epoch from« time »- min (« time ») over()) * 1000000) :: bigint'. – klin
Да, я обнаружил, что перевернул() внутрь, перемещая круглые скобки. Мне будет хорошо помнить, чтобы привязать функцию окна к совокупности. – Ben