Помогите с запросом.
От: Аноним  
Дата: 19.08.05 12:23
Оценка:
Есть таблицы Agents (agentid, name) Orders(orderid, agentid, prodid, orderdate)
Как вывести самые последние заказы всех агентов? Спасибо.
Re: Помогите с запросом.
От: banderlog  
Дата: 19.08.05 12:28
Оценка: 2 (1)
Здравствуйте, Аноним, Вы писали:

А>Есть таблицы Agents (agentid, name) Orders(orderid, agentid, prodid, orderdate)

А>Как вывести самые последние заказы всех агентов? Спасибо.


Вариантов много(Зависит от СУБД), пробуй так

select A.agentid, A.name, O.orderid, O.prodid, O.orderdate from Agents A
left join Orders O on O.agentid = A.agentid
where O.orderdate = (select max(orderdate) from Orders where agentid = A.agentid)

Для оракла нуна аналитические функции поюзать
Не оставляй работу на субботу, а секс на старость
Re[2]: Помогите с запросом.
От: Аноним  
Дата: 19.08.05 12:53
Оценка:
Здравствуйте, banderlog, Вы писали:

Спасибо за отклик.

B>Вариантов много

меня уже клинит

B>(Зависит от СУБД)

MS SQL

B>select A.agentid, A.name, O.orderid, O.prodid, O.orderdate from Agents A

B>left join Orders O on O.agentid = A.agentid
B>where O.orderdate = (select max(orderdate) from Orders where agentid = A.agentid)

т.к. O.orderdate =, то выводится только один самый поздний заказ.
Хочется вывести все последние заказы по агентам.
Re[3]: Помогите с запросом.
От: banderlog  
Дата: 19.08.05 13:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, banderlog, Вы писали:


А>Спасибо за отклик.


B>>Вариантов много

А>меня уже клинит

B>>(Зависит от СУБД)

А>MS SQL

B>>select A.agentid, A.name, O.orderid, O.prodid, O.orderdate from Agents A

B>>left join Orders O on O.agentid = A.agentid
B>>where O.orderdate = (select max(orderdate) from Orders where agentid = A.agentid)

А>т.к. O.orderdate =, то выводится только один самый поздний заказ.

А>Хочется вывести все последние заказы по агентам.


Это еще почему так? у меня в Ораклуле все ок Ты проверял? Если Микрософт Тупит, то дай мне ДДЛ таблиц, я проверю у себя.
select A.agentid, A.name, O.orderid, O.orderdate from Agents A
left join Orders O on O.agentid = A.agentid
where O.orderdate = (select max(orderdate) from Orders where agentid = A.agentid)


1 3 Lis 9 19.11.05 16
2 1
Evg 10 19.12.05 16
3 2
Serg 11 11.08.05 16
Не оставляй работу на субботу, а секс на старость
Re[3]: Помогите с запросом.
От: Аноним  
Дата: 19.08.05 13:21
Оценка:
вот так получается:

SELECT
a.agentid,
a.name,
o.orderid,
o.productid,
o.orderdate
FROM Orders AS o
INNER JOIN Agents AS a ON a.agentid=o.agentid
INNER JOIN
(
SELECT
oint.codeabon,
MAX(oint.orderdate) AS oe
FROM orders AS oint
WHERE oint.agentid = oint.agentid
GROUP BY oint.agentid
) AS oint ON oint.agentid=o.agentid
WHERE o.orderdate = oint.oe

вроде оттестил, вроде то что надо. но сомневаюсь.
может кто развеет сомнения
Re: Помогите с запросом.
От: Лекс Россия  
Дата: 19.08.05 13:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть таблицы Agents (agentid, name) Orders(orderid, agentid, prodid, orderdate)

А>Как вывести самые последние заказы всех агентов? Спасибо.


SELECT TOP 10 o.orederdate, a.name
FROM Agents AS a
LEFT OUTER JOIN Orders AS o
ON a.agentid = o.agentid
ORDER BY 1
C Уважением,
Андрей.
Re[2]: Помогите с запросом.
От: Лекс Россия  
Дата: 19.08.05 13:40
Оценка:
Или скажем, если в более жестких рамках:

За последнюю неделю:
-------------
SELECT o.orederdate, a.name
FROM Agents AS a
LEFT OUTER JOIN Orders AS o
ON a.agentid = o.agentid
WHERE o.orderdate BETWEEN DATEADD('ww', -1, DATE()) AND DATE()
-------------



С Уважением,
Лекс
C Уважением,
Андрей.
Re[3]: Помогите с запросом.
От: Аноним  
Дата: 19.08.05 14:07
Оценка:
Спасибо, Андрей Игоревич:

Л>Или скажем, если в более жестких рамках:

Но это все для случаев, когда известно каждый делает минимум один заказ в день.
А если у одного вчера, а у другого год назад. Нужен дата последнего заказа каждого
агента. Евгений (banderlog) оказался "ближе к телу", но, видимо, разница MS SQL с Oracle'oм мешает нам стать друзьями
Я в соседней ветке привел рабочий запрос, хочется чтобы кто-нибудь проанализировал.
Re[3]: Помогите с запросом.
От: banderlog  
Дата: 19.08.05 14:15
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, banderlog, Вы писали:


А>Спасибо за отклик.


B>>Вариантов много

А>меня уже клинит

B>>(Зависит от СУБД)

А>MS SQL

B>>select A.agentid, A.name, O.orderid, O.prodid, O.orderdate from Agents A

B>>left join Orders O on O.agentid = A.agentid
B>>where O.orderdate = (select max(orderdate) from Orders where agentid = A.agentid)

А>т.к. O.orderdate =, то выводится только один самый поздний заказ.

А>Хочется вывести все последние заказы по агентам.

Я проверил его на Микрософте, все работает. ты посмотри ты правильно условие написал

where O.orderdate = (select max(orderdate) from Orders where agentid = A.agentid) тут именно еще проверка максимальной даты только для агента из внешнего запроса where agentid = A.agentid
Не оставляй работу на субботу, а секс на старость
Re[4]: Помогите с запросом.
От: Аноним  
Дата: 22.08.05 11:51
Оценка:
Здравствуйте, Евгений:

признаю — мой косяк.

B>Я проверил его на Микрософте, все работает. ты посмотри ты правильно условие написал

В моей базе таблицы другие и сам запрос посложнее, видимо, я ошибся в другом месте,
а списал все на разницу MSSQL/Oracle.
Анализировать смысла нет: у меня — INNER JOIN + вложенный запрос, Ваша взяла
Заглаживаю вину голосованием.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.