Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Найти клиентов, не делавших заказов в последний месяц  [new]
ecofreeon
Member

Откуда:
Сообщений: 4
Добрый день, есть таблица Customers с полями из которых нужны только CustomerID(первичный ключ) и таблица Ordes с полями из которых нужны OrderID(первичный ключ), CustomerID и OrderDate(тип datetime). Собственно вопрос, как вывести клиентов, которые не делали запросов в последний месяц?
2 мар 16, 07:54    [18885506]     Ответить | Цитировать Сообщить модератору
 Re: Найти клиентов, не делавших заказов в последний месяц  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30821
ecofreeon
Собственно вопрос, как вывести клиентов, которые не делали запросов в последний месяц?
Используйте NOT EXISTS
2 мар 16, 08:08    [18885517]     Ответить | Цитировать Сообщить модератору
 Re: Найти клиентов, не делавших заказов в последний месяц  [new]
ecofreeon
Member

Откуда:
Сообщений: 4
alexeyvg,

а можете написать запрос? потому что я пытался разобраться с not exist, но так и не понял как верно его составить
2 мар 16, 08:10    [18885521]     Ответить | Цитировать Сообщить модератору
 Re: Найти клиентов, не делавших заказов в последний месяц  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30821
ecofreeon
я пытался разобраться с not exist, но так и не понял как верно его составить

Покажите свои попытки, говорите, что непонятно.

Вроде там всё просто, как по русски звучит, так будет и на SQL:
Получить поля
Из таблицы Клиенты
Если нет записей в таблице Заказы
При условии, что Дата заказов не старее месяца

Изучите примеры из хелпа, почитайте, там по русски написано, всё понятно.
https://msdn.microsoft.com/ru-ru/library/ms188336(v=sql.120).aspx
2 мар 16, 08:48    [18885624]     Ответить | Цитировать Сообщить модератору
 Re: Найти клиентов, не делавших заказов в последний месяц  [new]
ecofreeon
Member

Откуда:
Сообщений: 4
alexeyvg,
я делал так
SELECT distinct Customers.ContactName,Customers.CustomerID ,Orders.OrderDate
FROM Customers INNER JOIN
Orders ON Customers.CustomerID = Orders.CustomerID
WHERE (Orders.OrderDate > CONVERT(DATETIME, '1998-05-01 00:00:00', 102))
через not exist у меня даже запустить не получилось, так он постоянно подчеркивал красным
2 мар 16, 13:19    [18887250]     Ответить | Цитировать Сообщить модератору
 Re: Найти клиентов, не делавших заказов в последний месяц  [new]
ecofreeon
Member

Откуда:
Сообщений: 4
alexeyvg,

непонятно как составить эти два условия (Если нет записей в таблице Заказы
При условии, что Дата заказов не старее месяца) чтобы sql не ругался
2 мар 16, 13:20    [18887255]     Ответить | Цитировать Сообщить модератору
 Re: Найти клиентов, не делавших заказов в последний месяц  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
ecofreeon,

inner на left поменяйте и добавьте условие or Orders.OrderDate is null
2 мар 16, 13:29    [18887313]     Ответить | Цитировать Сообщить модератору
 Re: Найти клиентов, не делавших заказов в последний месяц  [new]
_djХомяГ
Guest
автор
таблица Ordes с полями из которых нужны OrderID(первичный ключ), CustomerID и OrderDate(тип datetime).

А что значит "нужны"? Ведь по идее должны выводиться не найденные в Orders записи (то есть поля будут иметь значение NULL значение) Или под этим скрывается что то другое?
2 мар 16, 13:49    [18887446]     Ответить | Цитировать Сообщить модератору
 Re: Найти клиентов, не делавших заказов в последний месяц  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49566
ecofreeon
Собственно вопрос, как вывести клиентов, которые не делали запросов в последний месяц?

Переформулируем вопрос так: "как найти клиентов, чей последний запрос был больше месяца назад". Теперь он звучит гораздо тривиальнее, не правда ли?..

RTFM GROUP BY, HAVING.
2 мар 16, 15:05    [18887927]     Ответить | Цитировать Сообщить модератору
 Re: Найти клиентов, не делавших заказов в последний месяц  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4395
Dimitry Sibiryakov
ecofreeon
Собственно вопрос, как вывести клиентов, которые не делали запросов в последний месяц?

Переформулируем вопрос так: "как найти клиентов, чей последний запрос был больше месяца назад". Теперь он звучит гораздо тривиальнее, не правда ли?..

RTFM GROUP BY, HAVING.


А по-моему ту нехер делать

SELECT Customers.ContactName,Customers.CustomerID ,Orders.OrderDate
FROM Customers 
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID AND Orders.OrderDate >= DATEADD(month, -1, GETDATE())
WHERE Orders.CustomerID IS NULL  


А вы, ТС, берите вот эту книжку и читайте её.
http://sql-language.ru/knigi-po-sql/sql-zaprosy-dlya-prostyx-smertnyx.html
2 мар 16, 15:14    [18887975]     Ответить | Цитировать Сообщить модератору
 Re: Найти клиентов, не делавших заказов в последний месяц  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Dimitry Sibiryakov
ecofreeon
Собственно вопрос, как вывести клиентов, которые не делали запросов в последний месяц?

Переформулируем вопрос так: "как найти клиентов, чей последний запрос был больше месяца назад". Теперь он звучит гораздо тривиальнее, не правда ли?..

RTFM GROUP BY, HAVING.


неа, вы не учитываете условие что у клиента вообще небыло заказов.
2 мар 16, 15:25    [18888020]     Ответить | Цитировать Сообщить модератору
 Re: Найти клиентов, не делавших заказов в последний месяц  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49566
WarAnt
у клиента вообще небыло заказов.

Тогда он вообще не клиент, а так, место зря в таблице занимает.
2 мар 16, 20:28    [18889393]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Найти клиентов, не делавших заказов в последний месяц  [new]
Sergei21
Member

Откуда:
Сообщений: 2
a_voronin,

Добрый день не подскажите, как сделать sql запросы на такие сегменты
1. Количество клиентов, заказывающих такси 2 и более раз в сутки.
2. Время от завершения 1-го заказа до создания 2-го заказа.
3. Время от завершения заказа до поступления звонка, по которому была оформлена претензия.
14 ноя 19, 12:21    [22016073]     Ответить | Цитировать Сообщить модератору
 Re: Найти клиентов, не делавших заказов в последний месяц  [new]
Remind
Member

Откуда: UK
Сообщений: 523
Sergei21,

1. GROUP BY + HAVING
2. DATEDIFF
3. DATEDIFF
14 ноя 19, 13:11    [22016145]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить