powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как это можно сделать (условие выборки)
9 сообщений из 9, страница 1 из 1
Как это можно сделать (условие выборки)
    #32033090
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть стандартнай запрос выборки. Оболочка позволяет только конкретизировать запрос - т.е. добавить дополнительные строки (фильтр) в where. Ну пример от фонаря:

select cb.AdresDostavki
from ClientBase cb,
Pokupki p
where p.DataPokupki = @Date
and p.Client = cb.Client

Могу добавить только "фильтр" который при исполнении запроса присобачит дополнительные "and'ы". Как вытянуть адрес доставки только того клиента, у которого эта покупка первая, хотя в базе клентов мог торчать давно?
...
Рейтинг: 0 / 0
Как это можно сделать (условие выборки)
    #32033098
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, это как раз твоя задача сформулировать критерий того, что для данного покупателя эта покупка первая.

Например, также от "фонаря", первая - значит единственная, тогда:

WHERE ... AND pokupID IN (SELECT pokupID FROM pokupki GROUP BY pokupID HAVING count(*)=1)

Слишком общий вопрос, чтобы можно было на него конкретно ответить.
...
Рейтинг: 0 / 0
Как это можно сделать (условие выборки)
    #32033149
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пристите Владимир. А если клиент сегодня сделал 2 заказа. Или 5. Но только сегодня! Мне желательно отобрать тех - которые в базе клиентов есть, а в базе покупок до сегодняшнего дня не было.

С уважением, Александр.
...
Рейтинг: 0 / 0
Как это можно сделать (условие выборки)
    #32033166
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Общий принцип - это использование вложенных запросов. Кроме того, есть специальные ключевые слова, которые можно использовать в условии WHERE обычного SQL-запроса

Почитайте в BOL описание к таким словам

IN
EXISTS
SOME | ANY

Например, в Вашем случае можно сделать условие выражающееся в словах примерно так:

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

...
WHERE ... AND pokupID NOT IN (SELECT pokupID FROM pokupki WHERE DataPokupki<@Date)

Возможно, это и не идеальный вариант. Надо бы посмотреть конкретную структуру базы данных, да и в планировшике запросов посмотреть на предмет оптимизации. Но как общий принцип, думаю понятно.
...
Рейтинг: 0 / 0
Как это можно сделать (условие выборки)
    #32033183
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо. В принципе, я ,ознакомившись с вашим первым предложением, додумался шерстить базу покупок со дня появления клиента до "вчерашнего". Но у меня 70 тыс. "клиентов", совершающих около 5 тыс. "покупок"в день, и база за 5 лет. А запрос, к которому я цепляюсь, отбирает "покупки" за день. И мне нужно прогнать базу по всем отобранным (5 тыс.). Я вешаю своим запросом всех и сам могу пойти поспать. Дайте пожалуйста совет, как мне можно поступить. Если Вам что-то нужно поконкретнее- могу сообщить только на ящик. Сами понимаете. Зараннее очень благодарен. Но если не ответите - я пойму. Нас таких идиотов очень много.
С уважением, Александр.
...
Рейтинг: 0 / 0
Как это можно сделать (условие выборки)
    #32033222
AISOFT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаете хранимую процедуру в ней создаете временую таблицу куда заносите только коды клиентов у которых до нужной даты была только одна покупка. В качестве параметра хранимой процедуре передаете дату и текст запроса, сцепляете переданный текст запроса + ' and '+
'<название кодового поля >+' in (Select '+'<название кодового поля >+' from #tmptable)', выполняете через EXECSQL и возвращаете результат клиенту. Это все.
...
Рейтинг: 0 / 0
Как это можно сделать (условие выборки)
    #32033231
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не по конкретному вопросу. Если перед Вами ставятся такие задачи, то лучше написать какого-нибудь клиента.
Можно, конечно, строить хитрые WHERE, но лучше иметь нормальный инструмент.
...
Рейтинг: 0 / 0
Как это можно сделать (условие выборки)
    #32033238
Фотография Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то типа того:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT cb.AdresDostavki
FROM ClientBase cb
     INNER JOIN Pokupki p
          ON p.Client = cb.Client
     INNER JOIN (
          SELECT Client, MIN(DataPokupki) AS DataPokupki
          FROM Pokupki
          GROUP BY Client
     ) x
          ON p.Client = x.Client
WHERE x.DataPokupki >= CONVERT(smalldatetime, FLOOR(CONVERT(float, getdate())))


-- Слон
...
Рейтинг: 0 / 0
Как это можно сделать (условие выборки)
    #32033251
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем огромное спасибо. Посидел ночку - выкрутился.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как это можно сделать (условие выборки)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]