Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос на поиск мин. цены, absolute database 
:(
    Опции темы
Gluttton
Дата 18.10.2009, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Услилит  тестовые данные теперь таблицы выглядят так:
user posted image
и
user posted image
Вот такой запрос:
Код

select distinct
    NM.name_new,
    NM.id,
    NM.description,
    NM.name1,
    NM.name2,
    NM.price,
    F.name
from "NAMES" as NM, Files as F
    where NM.file_id=F.id
    and NM.price=
    (
        select min(SN.price)
        from "NAMES" AS SN
           where NM.name_new=SN.name_new
    )
    and not exists
    (
        select
            NMA.name_new,
            NMA.id,
            NMA.description,
            NMA.name1,
            NMA.name2,
            NMA.price
        from "NAMES" as NMA
            where NM.name_new=NMA.name_new
            and NM.id<>NMA.id
            and NM.description=NMA.description
            and NM.name1=NMA.name1
            and NM.name2=NMA.name2
            and NM.price=NMA.price
    )
union all
select distinct
    NM.name_new,
    NM.id,
    NM.description,
    NM.name1,
    NM.name2,
    NM.price,
    F.name
from "NAMES" as NM, Files as F
    where NM.file_id=F.id
    and NM.price=
    (
        select min(SN.price)
        from "NAMES" AS SN
           where NM.name_new=SN.name_new
    )
    and exists
    (
        select
            NMA.name_new,
            NMA.id,
            NMA.description,
            NMA.name1,
            NMA.name2,
            NMA.price
        from "NAMES" as NMA
            where NM.name_new=NMA.name_new
            and NM.id<>NMA.id
            and NM.description=NMA.description
            and NM.name1=NMA.name1
            and NM.name2=NMA.name2
            and NM.price=NMA.price
    )
    and F.id=
    (
        select max(FA.id) as minid
        from Files as FA
            where exists
            (
                select *
                from "NAMES" as NMB
                    where NMB.file_id=FA.id
                    and NMB.name_new=NM.name_new
                    and NMB.price=
                    (
                        select min(NMC.price) as mncminprice
                        from "NAMES" as NMC
                            where NMC.name_new=NMB.name_new
                            and NMC.name_new=NM.name_new
                    )
            )
    )

Вернет вот такие вот данные:
user posted image
Запрос написан на SQL 92, без использования подзапросов поэтому я надеюсь AD его "прожует"...
Запрос расчитан на количество прайсов больше двух, если количество прайсов никогда не будет больше двух, то запрос будет выглядеть проще...



--------------------
Слава Україні!
PM MAIL   Вверх
lat
Дата 18.10.2009, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 14.1.2008

Репутация: нет
Всего: 1



Да ты зверь Чэл =)

К сожалению выдало
Код

[18.10.2009 23:32:44] Search condition is not applicable - Native error: 30144



--------------------
Gott weiß ich will kein Engel sein
PM ICQ   Вверх
Gluttton
Дата 18.10.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Цитата(lat @  18.10.2009,  23:41 Найти цитируемый пост)
Да ты зверь Чэл =)

Настоящий бы зверь реализовал это десятком строк (а не сотней) smile ...

Вот тут упоминается та же ошибка...

Предлагаю разбить запрос на две части: до и после union all (без union all)...
Выполнить сначала, то, что выше, а потом, то, что ниже...

А так же выполнить тот запрос, который, который возвращает все товары по одинаковой цене (т.е. тот, который вчера создали). Я это к тому, что может быть на стороне клиентского приложения что то изменилось?

Это сообщение отредактировал(а) Gluttton - 19.10.2009, 00:00


--------------------
Слава Україні!
PM MAIL   Вверх
lat
Дата 19.10.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 14.1.2008

Репутация: нет
Всего: 1



В АД запрос не скушало. 
А вот попробовал в MySQL, там на его выполнение ушло более минуты о_0 (это для 3000 запсией). А что будет тогда если записей буде намного больше.


--------------------
Gott weiß ich will kein Engel sein
PM ICQ   Вверх
Gluttton
Дата 19.10.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Цитата(lat @  19.10.2009,  12:55 Найти цитируемый пост)
А что будет тогда если записей буде намного больше.

Что будет, что будет... Сервер упадет и ничего больше не будет smile ...

Цитата(lat @  19.10.2009,  12:55 Найти цитируемый пост)
А вот попробовал в MySQL, там на его выполнение ушло более минуты о_0 (это для 3000 запсией).

Для более продвинутых СУБД относительно AD запрос, можно существенно упростить...

Так что если надумаешь переходить с АD на, что то другое, то пиши, пересмотрю запрос...


--------------------
Слава Україні!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.