Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запросы


dumka ©   (2008-04-09 13:03:00) 

Привет всем!
Нужно: вычислить суммарную стоимость последнего по времени(Дата) заказа. Если таких закзов несколько, то из них нужно выбрать заказ с найбольшим идентификатором.
SELECT Sum([Kol_blud]*[stoim]) AS Выражение1, Zakaz.Data, Zakaz.Kod_zak_ka
FROM Bludo INNER JOIN Zakaz ON Bludo.Kod_bl = Zakaz.Kod_bl
GROUP BY Zakaz.Data, Zakaz.Kod_zak_ka
HAVING (((Zakaz.Data)=(Select Max([Data]) from zakaz)));
Вот до сель работает, как реализовать второе условие?
СУБД ACCESS 2007


dumka   (2008-04-09 14:05:00) [1]


> Palladin

Да, все мне понятно.
МЫ молодцы...


Palladin   (2008-04-09 13:58:00) [2]

кто бы сомневался... а если еще поймешь этот запрос, вообще молодцом будешь... значит не все потеряно еще...


dumka   (2008-04-09 13:51:00) [3]


> Palladin

Обалдеть, работает!!!


Kolan   (2008-04-09 13:45:00) [4]

> блин, не сразу сообразил что такое bludo

Угу, даже таблица в БД называется неопититно, наверно еда еще хуже…


dumka   (2008-04-09 13:44:00) [5]

Во всяком случае спасибо,я подумаю


clickmaker   (2008-04-09 13:44:00) [6]

блин, не сразу сообразил что такое bludo
думаю, что за "блудозаказ" такой? ))


Palladin   (2008-04-09 13:40:00) [7]

select sum(Kol_blud*stoim), Zakaz.Data, Zakaz.Kod_zak_ka
from Bludo,Zakaz
where
Bludo.Kod_bl=Zakaz.Kod_bl and
zakaz.kod_zak_ka=(Select Max(kod_zak_ka) from zakaz where Zakaz.Data=(select max(Data) from Zakaz))
group by Zakaz.Data, Zakaz.Kod_zak_ka

наслаждайся...


Palladin   (2008-04-09 13:36:00) [8]


> dumka   (09.04.08 13:24) [7]

остальсь еще одно условие добавить в Select Max([Kod_zak_ka]) from zakaz
и убрать все из having'а в where и sum тоже убрать, если Sergey13 ©   (09.04.08 13:33) [9] не прав относительно уникальности идентификаторов заказов, если прав, то сум оставить :)


Sergey13   (2008-04-09 13:33:00) [9]

> [8] dumka   (09.04.08 13:27)

Если так можно провоцировать и заполнять вручную чем угодно (сейчас ИШ придет ругаться 8-)) то логично предположить несколько заказов с одинаковыми идентификаторами. 8-)


dumka   (2008-04-09 13:27:00) [10]


> А может быть максимальный идентификатор с НЕ максимальной
> датой?

Я думаю что да, такое условие, может это только ловушка.
Но я такую ситуацию справоцировала, т.е. так заполнила данные


dumka   (2008-04-09 13:24:00) [11]

SELECT Sum([Kol_blud]*[stoim]) AS Выражение1, Zakaz.Data, Zakaz.Kod_zak_ka
FROM Bludo INNER JOIN Zakaz ON Bludo.Kod_bl = Zakaz.Kod_bl
GROUP BY Zakaz.Data, Zakaz.Kod_zak_ka
HAVING (((Zakaz.Data)=(Select Max([Data]) from zakaz)) and ((Zakaz.Kod_zak_ka)=(Select Max([Kod_zak_ka]) from zakaz)));
Так вот я сделала вот так, отбора нет, но и ошибки нет.


Sergey13   (2008-04-09 13:24:00) [12]

> [5] Kolan ©   (09.04.08 13:21)

Я не вообще спросил, а конкретного человека про конкретную БД. Понятно, что "вообше" Ид-шники с датами никак не связаны.


Kolan   (2008-04-09 13:21:00) [13]

> А может быть максимальный идентификатор с НЕ максимальной
> датой?

Может. Например SQLite, если авто инкрементить уже некуда будет заполнять имеющиеся пробелы в нумерации…


Kolan   (2008-04-09 13:20:00) [14]

> и дата максимальная и идентификатор

Используй AND


Sergey13   (2008-04-09 13:19:00) [15]

> [2] dumka   (09.04.08 13:17)

А может быть максимальный идентификатор с НЕ максимальной датой?


dumka   (2008-04-09 13:17:00) [16]

Нет, вот такое условие и дата максимальная и идентификатор максимальный


Sergey13   (2008-04-09 13:13:00) [17]

> [0] dumka   (09.04.08 13:03)
> Если таких закзов несколько, то из них нужно выбрать заказ
> с найбольшим идентификатором.

Ну так и выбирай сразу по максимальному идентификатору. Зачем дату сюда пивлекать?


Наверх

Титульная страница Поиск, карта сайта Написать письмо