J'ai 2 tables. order_product_table et selling_product_table j'ai besoin de joindre les deux tables et en utilisant la date obtenir de la valeur si vous voyez la table finale, vous comprendrez ce que je veux. Quelqu'un sait-il comment faire ça ??

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

Résultat 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 à 10:46

3 réponses

La solution correcte en tant que sous-requête corrélée est:

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 ;

Remarques:

    Un JOIN explicite n'est pas nécessaire. Le ORDER BY est TRÈS IMPORTANT dans la sous-requête.
  • La clause de corrélation doit correspondre aux produits.

Cependant, je dirais ceci comme une jointure latérale:

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 à 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 

essayez quelque chose comme ça. obtiendra le résultat.

1
Zeshan 4 nov. 2019 à 11:29

Select * from selling_product_table s left join order_product_table o on (product_id, date) Cela suppose que tous les produits vendus ont été commandés.

0
Bwire 4 nov. 2019 à 07:55