Главная страница
    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.45 MB
Время: 0.014 c
1-1142596234
Dust
2006-03-17 14:50
2006.04.23
Скачал Indy 10, не могу установить


15-1144167745
Kerk
2006-04-04 20:22
2006.04.23
Visual Fox Pro?


1-1142857647
StriderMan
2006-03-20 15:27
2006.04.23
Как реализовать SPA (безопасная проверка пароля)


3-1140813732
shulik
2006-02-24 23:42
2006.04.23
База mysql+Delphi+TStringGrid


15-1144225435
ocean
2006-04-05 12:23
2006.04.23
Перезагрузить ADSL-модем





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский