Перейти к содержимому


Сложные SQL запросы в Фильтрах


Сообщений в теме: 8

#1 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 07 Май 2014 - 12:59

SELECT * FROM `f_data160` t1 WHERE `f2301` NOT IN ('Клиент розница','Клиент Дистриб','Клиент Дистриб+','Потенциальный клиент', 'Клиент VIP 2.0','Удалить!') and `f2801` NOT IN('Вторичная проверка','Контрольная проверка') AND NOT EXISTS (SELECT id FROM `f_data211` t2 where left(`f2741`, 10) <= DATE_ADD("2014-05-05", INTERVAL 21 DAY) AND `t2`.`f2721` = `t1`.`id`);

Есть такой вот запрос. Могу ли я его воссоздать через фильтр? Значение даты должно браться из поля таблицы f_data160?

Логика: Выбрать все записи у которых поле менеджер равно текущий и статус не равен ... и спец. статус не равен... и количество заказов за период с даты принятия менеджером равно + 21 день = 0

f_data211 подчиненная для f_data160 по полю f2721.

Сообщение отредактировал wondertalik: 07 Май 2014 - 14:04


#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 07 Май 2014 - 13:25

Отвечали уже неоднократно: в режиме эксперта в фильтре можно задать любое выражение для WHERE какой угодно сложности. Т.е. в вашем случае просто отрезаете все что до первого WHERE, включая его самого.

#3 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 07 Май 2014 - 14:07

Просмотр сообщенияCbCoder (07 Май 2014 - 13:25) писал:

Отвечали уже неоднократно: в режиме эксперта в фильтре можно задать любое выражение для WHERE какой угодно сложности. Т.е. в вашем случае просто отрезаете все что до первого WHERE, включая его самого.
Меня интересует переносимость такого запроса.
1. как мне указать имена таблиц f_data221, так чтобы если f_ изменится, мне не пришлось менять запрос. По аналогии с вычислениями, где я указывал DATA_TABLE.
2. Как вместо в DATE_ADD("2014-05-05", INTERVAL 21 DAY), вместо даты подставлять значение из поля таблицы f_data160?

Сообщение отредактировал wondertalik: 07 Май 2014 - 14:07


#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 07 Май 2014 - 14:13

1. Никак, в данном случае автозамены не предусмотрено. Вам придется самим за этим следить.
2. Сами значения никак нельзя подставить, в условии запроса могут быть только имена полей. Как именно подставить в запрос к одной таблице поле из другой - честно говоря сам затрудняюсь сказать.

#5 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 07 Май 2014 - 14:16

Просмотр сообщенияCbCoder (07 Май 2014 - 14:13) писал:

2. В чем проблема подставить имя поля, не совсем понял?
Внешнее или внутреннее имя поля? Или любое из них?

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 07 Май 2014 - 14:18

Я менял ответ, перечитайте.

#7 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 10 Май 2014 - 02:37

select * from f_data91 t1 right join (select distinct `f571` from f_data11 WHERE `f721` IN ('Выкуплен', 'КУПЛЕН НЕ ПОЛНОСТЬЮ', 'Приедет следующим заказом') AND CAST(`f2061` as SIGNED) != CAST(`f2891` as SIGNED)) t2 ON `t1`.id = `t2`.`f571` AND `t1`.`status` = 0 WHERE `t1`.`f631` = 'Прибыл'
Не догоняю как такого вида запрос загнать в фильтр. Это возможно?

#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 10 Май 2014 - 13:50

Нет. Как уже отвечал, в фильтре можно задать только часть WHERE запроса. У вас же используется соединение таблиц в части FROM. Его задать нельзя.

#9 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 10 Май 2014 - 17:22

Просмотр сообщенияCbCoder (10 Май 2014 - 13:50) писал:

Нет. Как уже отвечал, в фильтре можно задать только часть WHERE запроса. У вас же используется соединение таблиц в части FROM. Его задать нельзя.
Было бы реально круто, если бы можно было задавать джойны, с заранее оговоренными обязательными структурами возвратов.





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных