Главная страница
    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.013 c
15-1144273946
Yegorchic
2006-04-06 01:52
2006.04.23
Файл и папка


15-1143862359
Pazitron_Brain
2006-04-01 07:32
2006.04.23
Почему этот скрипт не отображает результат?


2-1144755963
elfebet
2006-04-11 15:46
2006.04.23
Как добавить в exe иконку


3-1141126984
Рафик
2006-02-28 14:43
2006.04.23
MSSQL Distinct по дате


15-1143492305
Climber
2006-03-28 00:45
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский