Форум: "Начинающим";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
ВнизПомогите, плиз, с запросом... Найти похожие ветки
← →
skovorodka © (2006-04-05 23:17) [0]Таблицы:
(накладные)invoices: id, placeID
(поступления)earnings: id, itemID, invoiceID, price
(продажи)sales: id, itemID, placeID
А нужно построить из них прайс-лист с актуальными ценами. Тоесть из последнего прихода товара(item) для каждого склада(place). Для тех товаров, количество которых больше 0. Уже несколько дней мучаюсь, получился двойной вложенный подзапрос :) Поможите кто-нибудь, а то у меня будет нервный срыв :(
БД MySQL 5.0
← →
ЮЮ © (2006-04-06 03:29) [1]>Для тех товаров, количество которых больше 0
Что-то о количестве в структуре не слова.
MySQL, извини, изучать резона нет, на MS SQL написал бы так:
SELECT
earnings.*
FROM (
SELECT Max(earnings.id) Id FROM
earnings
JOIN invoices ON earnings.invoiceID = invoices.id
GROUP BY placeID, itemID
) LastEarnings
JOIN earnings ON earnings.ID = LastEarnings.ID
JOIN (
<запрос, выдающий ItemId и placeID для тех товаров, количество которых больше 0>
) PresentedItems ON
(PresentedItems.ItemId = earnings.ItemId) AND (PresentedItems.placeID = earnings.placeID)
Тоже 2 подзапроса, только не вложенных. Только умеет ли так MySQL - не знаю.
← →
skovorodka © (2006-04-08 21:39) [2]Если я правильно понял у тебя join`янтся подряд три таблицы. Именно так у меня и получилось, но в MySQL это не работает. Видимо если такой запрос написать нельзя, придется реализовать это через временные таблицы.
Спасибо ЮЮ за ответ.
← →
skovorodka © (2006-04-10 02:23) [3]Чуть разобрался, спасибо ещё раз. Это то, что надо! Только у earnings нет placeID (в конце) Но мысль гениальная.
← →
ЮЮ © (2006-04-10 03:21) [4]
> Только у earnings нет placeID (в конце)
Странно, в начале (подзапрос LastEarnings) он есть, а в конце куда-то подевался.
Естественно, он берется из invoices.
← →
skovorodka © (2006-04-11 14:32) [5]В конце концов получилось вот так
SELECT iid, pid, items.name, places.name, t.name, IF(SaleSum IS NULL, EarnSum, EarnSum-SaleSum), Price FROM (
(SELECT MAX(EarnID) Id, ItemID, PlaceID FROM earnings e, invoices i WHERE i.InvoiceID=e.InvoiceID
GROUP BY ItemID, PlaceID) LastEarnings
LEFT JOIN (SELECT ItemID iid, PlaceID pid, EarnID, Price FROM earnings e, invoices i WHERE
i.InvoiceID=e.InvoiceID) Prices ON Prices.iid=LastEarnings.ItemID AND Prices.pid=
LastEarnings.PlaceID AND Prices.EarnID=LastEarnings.Id
LEFT JOIN (SELECT ItemID iid, PlaceID pid, SUM(`Count`) as EarnSum, EarnID FROM earnings e, invoices i
WHERE i.InvoiceID=e.InvoiceID GROUP BY iid, pid) ea USING (iid, pid)
LEFT JOIN (SELECT ItemID iid, PlaceID pid, SUM(`Count`) as SaleSum FROM sales GROUP BY iid, pid) sa
USING (iid, pid)), items, places, `types` t WHERE items.ItemID=iid AND places.PlaceID=pid AND t.TypeID=items.TypeID
ORDER BY places.name, t.name, items.name
И все работает. :D
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.013 c