как получить значение, используя последнюю дату из одной таблицы и присоединение к другой таблице - PullRequest
0 голосов
/ 08 ноября 2018

у меня есть 1 таблица инвентаризация_движений вот данные в таблице

product_id | staff_name |  status | sum | reference_number
--------------------------------------------------
  1          zes             cp     1    000122
  2          shan             cp     4    000133

У меня есть другая таблица.

 orderdate   product_id   cost
--------------------------------
01/11/2018    1            3200
01/11/2018    2             100
02/11/2018    1            4000
02/11/2018    1            500
03/11/2018    2            2000

я хочу этот результат

product_id| staff_name | status | sum reference_number  |  cost
--------------------------------------------------------------
      1         zes        cp     1    000122         4000
      2         shan       cp     4    000133         2000

вот мой запрос

select ipm.product_id, 
case when ipm.order_by_id is not null then 
(select au.first_name from users_staffuser us inner join auth_user au on us.user_id= au.id
where us.id = ipm.order_by_id) else '0' end as "Staff_name"
,ipm.status,
Sum(ipm.quantity), ip.reference_number
from inventory_productmovement ipm
inner join inventory_product ip on ipm.product_id = ip.id
inner join users_staffuser us on ip.branch_id = us.branch_id 
inner join auth_user au on us.user_id = au.id
AND ipm.status = 'CP'
group by ipm.product_id, au.first_name, ipm.status,  
ip.reference_number, ip.product_name
order by 1

Ответы [ 5 ]

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

Вы можете использовать запрос ниже, он выберет данные в соответствии с самой последней датой

WITH result as (
   SELECT product_id,cost
         ,ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY date DESC)
   FROM inventory_orderproduct )
 SELECT i.product_id,i.staff_name,i.status,i.sum reference_number ,s.Cost
 FROM result s
 JOIN inventory_movement i  ON i.product_id =s.product_id 
0 голосов
/ 08 ноября 2018

В данной ситуации это должно работать нормально:

Select table1.product_id, table2.staff_name, table2.status, table2.reference_number, 
MAX(table1.cost)
FROM table2
LEFT JOIN table1 ON table1.product_id = table2.product_id
GROUP BY table2.product_id, table2.staff_name, table2.status, table2.reference_number
0 голосов
/ 08 ноября 2018

Думаю, это поможет вам: SQL: выбрать максимальное значение для каждого уникального ключа? После того, как вы получите представление с максимальными значениями для каждого идентификатора, вы можете выполнить обычное внутреннее соединение.

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

Вот решение вашего вопроса. Оно работает нормально. Если вам нравится ответ, пожалуйста, проголосуйте!

SELECT i.product_id,i.staff_name,i.status,i.sum reference_number ,s.Cost
FROM (SELECT product_id,MAX(cost) AS Cost
    FROM inventory_orderproduct 
    GROUP BY product_id ) s
JOIN inventory_movement i  ON i.product_id =s.product_id 
0 голосов
/ 08 ноября 2018

Вы можете использовать приведенный ниже запрос, чтобы получить МАКС. Стоимость продуктов

SELECT i.product_id,i.staff_name,i.status,i.sum reference_number ,s.MAXCost
FROM (SELECT product_id,MAX(cost) AS MAXCost
    FROM inventory_orderproduct 
    GROUP BY product_id ) s
JOIN inventory_movement i  ON i.product_id =s.product_id 

Для получения стоимости, используя самую последнюю дату, используйте следующий запрос

WITH cte as (
   SELECT product_id,cost
         ,ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY orderdate DESC) AS Rno
   FROM inventory_orderproduct )
 SELECT i.product_id,i.staff_name,i.status,i.sum reference_number ,s.Cost
 FROM cte s
 JOIN inventory_movement i  ON i.product_id =s.product_id 
 WHERE s.Rno=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...