Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.23;
Скачать: CL | DM;

Вниз

Помогите, плиз, с запросом...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.046 c
15-1143744259
LordOfRock
2006-03-30 22:44
2006.04.23
Просто интересно...


2-1144402787
Lera
2006-04-07 13:39
2006.04.23
Приложения


1-1142560956
Nostradamus
2006-03-17 05:02
2006.04.23
Многоязычные русурсы


15-1143653618
Kolan
2006-03-29 21:33
2006.04.23
Совместимось bpl пакетов Delphi 2006 с Delphi 7.


2-1144754608
dabreezy
2006-04-11 15:23
2006.04.23
Вопрос по TidHTTP