2016-11-03 12 views
0

私は、次の表があります。cash_billings_bills_articlesarticles_pricehistoryUPDATE MySQLのテーブルベースのDATETIME列

articles_pricehistory

cash_billings_bills_articles

を私は彼のベースの日付にarticles_pricehistoryに従ってcashbillingbillarticle_cost列を更新する必要があります。このロジックは、取引日付cashbillingbill_dateを遡ってすべての履歴レコードを選択し、選択したフィルタの最新のコストを取得することです。

これは私の望ましい結果である:

result

これは私が何をしようとしたものです:

UPDATE cash_billings_bills_articles 
    LEFT JOIN articles_pricehistory USING(article_id) 
    LEFT JOIN cash_billings_bills USING(cashbillingbill_id) 
SET cash_billings_bills_articles.cashbillingbillarticle_cost = articles_pricehistory.articlepricehistory_cost 
    WHERE cash_billings_bills.cashbillingbill_date >= articles_pricehistory.articlepricehistory_date; 

答えて

0

私は相関サブクエリの観点でこの考える:

UPDATE cash_billings_bills_articles cbba 
    SET cbba.cashbillingbillarticle_cost = (SELECT ph.articlepricehistory_cost 
              FROM articles_pricehistory ph JOIN 
               cash_billings_bills cbb 
               USING (cashbillingbill_id) 
              WHERE ph.article_id = cbba.article_id AND 
               ph.articlepricehistory_date <= cbb.cashbillingbill_date 
              ORDER BY ph.articlepricehistory_date DESC 
              LIMIT 1 
              ); 
+0

4行目に構文上の問題があります。 –

+0

@JonathanEdgardo。 。 。 'join 'を追加したときに修正したと思います。 –