Tengo 2 mesas. order_product_table y selling_product_table necesito unir la tabla y usar la fecha obtener valor si ves la tabla final que entenderás lo que quiero. Nadie sabe cómo hacer esto ??

order_product_table

id    | date         | Product_id  | value 
-------------------------------------------
1     | 2017-07-01   | 1           | 10 
3     | 2017-10-02   | 2           | 30
4     | 2018-01-20   | 1           | 20
5     | 2018-02-20   | 2           | 40

selling_product_table

id    | date         | Product_id  | seling_price
------------------------------------------------
1     | 2017-08-01   | 1           | 500
2     | 2017-10-06   | 2           | 100
3     | 2017-12-12   | 1           | 500
4     | 2018-06-25   | 2           | 100
5     | 2018-07-20   | 1           | 500

Resultado final

id    | date         | Product_id  | value | selling_price
---------------------------------------------------------
1     | 2017-08-01   | 1           | 10    |  500
2     | 2017-10-06   | 2           | 30    |  100
3     | 2017-12-12   | 1           | 10    |  500
4     | 2018-06-25   | 2           | 40    |  100
5     | 2018-07-20   | 1           | 20    |  500
-1
zeeshan 4 nov. 2019 a las 10:46

3 respuestas

La solución correcta como una subconsulta correlacionada es:

select s.date, s.product_id,
       (select o.value
        from order_product_table o
        where o.product_id = s.product_id and
              o.date <= s.date
       ) as value, s.selling_price 
from selling_product_table s ;

Notas:

    No es necesaria una JOIN explícita. La ORDER BY es MUY IMPORTANTE en la subconsulta.
  • La cláusula de correlación debe coincidir con los productos.

Sin embargo, lo expresaría como una unión lateral:

select s.date, s.product_id,
       o.value, s.selling_price 
from selling_product_table s left join lateral
     (select o.*
      from order_product_table o
      where o.product_id = s.product_id and
            o.date <= s.date
      order by o.date desc
      limit 1
     ) o;
0
Gordon Linoff 4 nov. 2019 a las 12:07
select s.date,s.product_id,(select o.value from order_product_table o
where o.date < s.date) as value ,s.seling_price 
from selling_product_table s 
left join order_product_table o on  s.product_id=o.product_id 

Intenta algo como esto. obtendrá resultado.

1
Zeshan 4 nov. 2019 a las 11:29

Select * from selling_product_table s left join order_product_table o on (product_id, date) Esto supone que todos los productos vendidos fueron pedidos.

0
Bwire 4 nov. 2019 a las 07:55