Postgres вычисляет разницу с помощью оконных функций - PullRequest
0 голосов
/ 02 ноября 2018

Прошу прощения заранее, если вопрос слишком базовый. Оконные функции забавны и сложны одновременно!

У меня есть две таблицы Postgres, такие как ниже, называемые client и order.

id | name
------------
41 | james
29 | melinda
36 | henry
...

id | date | volume | client_id
------------------------------
328 | 2018-01-03 | 16 | 41
411 | 2018-01-29 | 39 | 29
129 | 2018-01-13 | 73 | 29
542 | 2018-01-22 | 62 | 36
301 | 2018-01-17 | 38 | 41
784 | 2018-01-08 | 84 | 29
299 | 2018-01-10 | 54 | 36
300 | 2018-01-10 | 18 | 36
178 | 2018-01-30 | 37 | 36
...

a) Как я могу написать запрос, чтобы найти наибольшую разницу в объеме заказа для каждого клиента? Например, client_id = 36 должно показывать (54 + 18) - 37 = -35. Это связано с тем, что заказы, сделанные одним и тем же клиентом в один и тот же день, должны учитываться как один заказ.

б) Как найти разницу в объеме между двумя последними заказами для каждого клиента? Например, client_id = 29 должен показать 39 - 73 = -34

1 Ответ

0 голосов
/ 02 ноября 2018

Ну вот и T-SQL.
Для этой формулы, как вы сказали ---> Макс (общий объем каждый день) - Мин (общий объем каждый день)
Может вам помочь.

SELECT (X.Max(SumV)-X.Min(SumV))
From (
     SELECT Client_Id,Date,SUM(Volume) AS SumV
     FROM Orders
     GROUP BY Client_id,Date
     ) X

Group by X.Client_Id
...