Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.011 c
15-1143797930
Kolan
2006-03-31 13:38
2006.04.23
Пример из книги не соответствует действительности.


2-1144603233
veb
2006-04-09 21:20
2006.04.23
Метка диска


2-1144059818
Khim
2006-04-03 14:23
2006.04.23
TActionMainMenuBar


2-1144751733
speed
2006-04-11 14:35
2006.04.23
Delphi &amp; Access


15-1143698572
LOL :)
2006-03-30 10:02
2006.04.23
Зацените мягкие детские игрушки :)))





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский