2016-07-31 3 views
3

У меня есть две таблицы:Вставка данных из другой таблицы

Stock данных

Batch Stock Rate 
------------------------ 
123---ABC---123 
251---XYZ---50 
250---XYZ---55 
247---XYZ---48 
118---ABC---120 
310---PQR---77 
309---PQR---76 

и второй стол Order Book

Date-------Stock---qty--Rate 
-------------------------- 
2016-01-01---ABC---10---Null 
2016-01-02---XYZ---25---Null 
2016-01-03---PQR---18---Null 
2016-01-04---XYZ---50---Null 

Я застрял с вставкой Оценить в Заявке таблицу книг из данных запаса, где ставка в данных запаса должна быть последней партии для каждого продукта. Заранее спасибо

+0

«данные о запасах, где указанная цена на фондовых данных должна быть последней партии для каждого продукта» - может вы делаете это более конкретным и добавляете пример? – Philipp

+0

Как вы определяете последнюю партию? наибольшая ценность 'Batch'? – 1000111

+0

@Philipp ставка для ABC должна быть 123, которая имеет последний номер партии – Kris

ответ

0

Попробуйте запрос: -

UPDATE order_book ob, (
      SELECT rate, stock 
      FROM stock_data sd 
      GROUP BY stock 
      HAVING MAX(batch) 
      ORDER BY batch DESC 
    ) result 
SET ob.rate = result.rate 
WHERE ob.stock = result.stock 
+0

Код ошибки: 1175. Вы используете безопасный режим обновления, и вы попытались обновить таблицу без WHERE, которая использует столбец KEY. Чтобы отключить безопасный режим, переключите опцию в Preferences -> SQL Editor и снова подключите. – Kris

+0

Запустить этот SET SQL_SAFE_UPDATES = 0; –

1

Пожалуйста, попробуйте следующий запрос:

UPDATE OrderBook OB 
INNER JOIN (
    SELECT 
     SD.Stock, 
     SD.Rate 
    FROM StockData SD 
    INNER JOIN (
     SELECT 
      Stock, 
      MAX(Batch) max_batch 
     FROM StockData 
     GROUP BY Stock 
    ) AS t 
    ON SD.Stock = t.Stock AND SD.Batch = t.max_batch 
) AS maxBatchRateTable 
ON OB.Stock = maxBatchRateTable.Stock 
SET OB.Rate = maxBatchRateTable.Rate; 

Объяснение:

Этот запрос

SELECT 
     SD.Stock, 
     SD.Rate 
    FROM StockData SD 
    INNER JOIN (
     SELECT 
      Stock, 
      MAX(Batch) max_batch 
     FROM StockData 
     GROUP BY Stock 
    ) AS t 
    ON SD.Stock = t.Stock AND SD.Batch = t.max_batch 

находит скорость от последней партии для каждой акции.

Позже, если вы сделаете INNER JOIN между этой таблицей и вашей OrderBook таблице на соответствие Stock и обновить Rate в OrderBook таблице по значению rate возвращенного выше запроса вы получите то, что вы хотите.

+0

Ха-ха, если бы я использовал короткие aliases Я мог бы быть первым – Philipp

+0

Почему вы удалили свой ответ @Philipp. Мы начали работать одновременно. Вероятно, это может предшествовать другому. Это неважно. Надеюсь, вы не повторите этого в будущем. :) – 1000111

+0

Код ошибки: 1175. Вы используете безопасный режим обновления, и вы попытались обновить таблицу без WHERE, которая использует столбец KEY. Чтобы отключить безопасный режим, переключите опцию в Preferences -> Editor SQL и снова подключите. – Kris

0
UPDATE 
    order_book 
INNER JOIN 
    (
     SELECT 
     Rate, 
     Stock 
     FROM 
     stock_data 
     INNER JOIN 
     (
      SELECT 
       MAX(Batch) AS batch, 
       stock  
      FROM 
       stock_data  
      GROUP BY 
       Stock 
     ) AS latestBatch  
      ON stock_data.Batch = latestBatch.batch 
      AND stock_data.stock = latestBatch.stock 
     ) AS updateData 
      ON updateData.Stock = order_book.Stock 
     SET 
     order_book.Rate = updateData.Rate 

Должно быть вдоль этих линий

+0

Спасибо за отмену ** delete ** – 1000111

+0

Думал, что в ответах не было необходимости в том же запросе, но я думаю, это не повредит :) – Philipp

+0

На самом деле, я думаю, вы всегда можете сделать свой ответ ** отличным * * путем добавления более подробной информации. Делая это, я считаю, что ваши усилия не напрасны. – 1000111

Смежные вопросы