CREATE TABLE logistics (
id SERIAL PRIMARY KEY,
time_stamp DATE,
product VARCHAR(255),
quantity INT
);
INSERT INTO logistics
(time_stamp, product, quantity)
VALUES
('2020-01-14', 'Product_A', '100'),
('2020-01-14', 'Product_B', '300'),
('2020-01-15', 'Product_B', '400'),
('2020-01-15', 'Product_C', '350'),
('2020-01-16', 'Product_B', '530'),
('2020-01-16', 'Product_C', '350'),
('2020-01-16', 'Product_D', '670'),
('2020-01-17', 'Product_C', '500'),
('2020-01-17', 'Product_D', '980'),
('2020-01-17', 'Product_E', '700'),
('2020-01-17', 'Product_F', '450');
Ожидаемый результат:
time_stamp | difference | info
------------|----------------|--------------------------------------
2020-01-14 | 400 | =(100+300)
2020-01-15 | 350 | =(400+350)-(300+100)
2020-01-16 | 800 | =(530+350+670)-(400+350)
2020-01-17 | 1080 | =(500+980+700+450)-(530+350+670)
Я хочу рассчитать общую разницу quantity
между двумя timestamps
.
Поэтому я попытался использовать запрос из этот вопрос:
SELECT
t1.time_stamp AS time_stamp,
t1.quantity AS quantity,
COALESCE(t1.quantity-LAG(t1.quantity) OVER (PARTITION BY t1.time_stamp ORDER BY t1.time_stamp), t1.quantity) AS difference
FROM
(SELECT
l.time_stamp AS time_stamp,
SUM(l.quantity) AS quantity
FROM logistics l
GROUP BY 1
ORDER BY 1) t1
GROUP BY 1,2
ORDER BY 1,2;
Однако я не могу получить ожидаемый результат.
Что мне нужно изменить, чтобы заставить его работать?
2 ответа
Вы можете использовать это:
select time_stamp
,s-COALESCE(LAG(t1.s) OVER (ORDER BY t1.time_stamp),0) as difference
from
(select time_stamp,sum(quantity) as s
from logistics
group by time_stamp)t1
Выход:
time_stamp difference
2020-01-14 400
2020-01-15 350
2020-01-16 800
2020-01-17 1080
Вы также можете использовать предложение with, сначала вычислите сумму, а затем проще вычислить отставание:
with _sum as (
SELECT distinct
logistics.time_stamp AS time_stamp,
sum(quantity) over (PARTITION by time_stamp) as summe
from logistics
order by time_stamp
)
select
time_stamp,
summe - coalesce(lag(summe) over (order by time_stamp),0)
from _sum
Похожие вопросы
Связанные вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.