У меня есть небольшая база данных различных частей и цен на компьютер. Есть 2 стола, детали и цены.Соединительные столы, в которых находятся два столбца
части:
partID desc mfgr timeStamp
---------- ---------- ---------- ----------
1 RAM Crucial 1
2 MOBO MSI 1
3 I7 970 Intel 1
1 RAM Crucial 2
Цены:
productID qty price timeStamp
---------- ---------- ---------- ----------
1 1 50.0 1
1 2 100.0 1
1 3 130.0 1
2 1 140.0 1
3 1 499.99 1
3 1 449.99 2
1 4 150.0 2
2 1 150.0 2
1 1 40.0 2
1 4 200.0 3
мне нужно, чтобы захватить все из частей, которая имеет самую последнюю метку времени и GROUP_CONCAT (цена) для всех цен, которые соответствуют как partID и метку времени. Таким образом, результат должен выглядеть примерно так:
partID desc mfgr timeStamp GROUP_CONCAT(price)
---------- ---------- ---------- ---------- -------------------
1 RAM Crucial 2 150.0,40
2 MOBO MSI 1 140.0
3 I7 970 Intel 1 499.99
Я действительно близкий, но не совсем правильный. Я попытался
SELECT * FROM Parts INNER JOIN
(SELECT partID, MAX(Parts.timeStamp) as maxTS, GROUP_CONCAT(price) FROM
Parts, Prices WHERE partID = Prices.productID GROUP BY partID) grouped
ON Parts.partID = grouped.partID AND Parts.timeStamp = grouped.maxTS;
Но это захватывает все из таблицы цен, где часть ID соответствует, или не совпадает также метка времени.
partID desc mfgr timeStamp partID maxTS GROUP_CONCAT(price)
---------- ---------- ---------- ---------- ---------- ---------- -------------------
2 MOBO MSI 1 2 1 140.0,150.0
3 I7 970 Intel 1 3 1 449.99,499.99
1 RAM Crucial 2 1 2 40.0,50.0,100.0,130
Так что я изменил мою команду
SELECT * FROM Parts INNER JOIN
(SELECT partID, MAX(Parts.timeStamp) AS maxTS, GROUP_CONCAT(price)
FROM Parts, Prices
WHERE partID = Prices.productID AND (SELECT MAX(parts.timestamp) FROM Parts) = Prices.timeStamp) grouped
ON Parts.partID = grouped.partID AND Parts.timeStamp = grouped.maxTS;
Но это совпадение только строки из цен, которые имеют наибольшую временную метку, которая происходит по частям. (Что равно 2)
Что я здесь делаю неправильно?
Хм, интересно, я пытался делать * почти * точно, но я использовал присоединиться вместо этого. Это хорошо работает. Просто хочу убедиться, что я правильно понимаю, как это работает, поэтому исправьте меня, если я ошибаюсь. Второй «select» возвращает другую «таблицу», если вы это сделаете, с именем aux, а затем первый «выбор» - из «Детали», «Цены» и «Aux»? – DJMcMayhem
Я расширил ответ, дайте мне знать, если это ответит на ваши вопросы. –