|
|
|
| Есть куча клиентов. У них куча заказов.
Задача - вывести не больше двух первых заказов каждого клиента. У меня только один вариант возникает - VBA код со вставкой первых двух записей из рекордсета во временную таблицу.
Можно решить эту задачу запросами? | |
|
| |
|
|
|
|
| допустим 100 клиентов с 3-мя заказами каждый - итого 300 заказов.
Мне надо вывести 100 клиентов с первыми 2-мя - Итого 200 записей.
select top 2 ... выведет только 2 записи | |
|
| |
|
|
|
| Предположим что есть таблицы:
tblClients - клиенты
idClient - код Клиента
NameClient - Название ......
tblOrders - заказа
IdOrder - код заказа
dtOrder - дата заключения заказа
.....
Тогда запрос:
SELECT tblClients.idClient,
(select top 1 idOrder
from tblOrders
where tblClients.idClient = tblOrders.idClient
order By dtOrder) AS OrderID
FROM tblClients
Union
SELECT tblClients.idClient,
(select top 1 idOrder
from tblOrders
where tblClients.idClient = tblOrders.idClient
and tblOrders.id not in (select top 1 idOrder
from tblOrders
where tblClients.idClient = tblOrders.idClient
order By dtOrder)
Order By dtOrder ) AS OrderID
FROM tblClients
|
Вернет коды клиентов и соответвующие им коды первых двух (по дате заключения) заказов | |
|
| |
|
|
|
| Ну голова!!!! Чуял что UNION надо юзать но как???
СПАСИБО | |
|
| |
|
|
|
| Еще вариант попроще:
SELECT ЗаказID FROM Заказы GROUP BY КлиентID, ЗаказID HAVING (((Count(*))<=2));
Можно добавить и другие поля (группировка по всем).
Можно изменить ограничение количества, а добавив ORDER BY ДатаЗаказа DESC, получить последние заказы. | |
|
| |
|
|
|
| ага!
не допер | |
|
| |
|
|
|
| Не соглашусь с
"SELECT ЗаказID FROM Заказы GROUP BY КлиентID, ЗаказID HAVING (((Count(*))<=2))"
Этот запрос выведет все заказы клиентов.
Если убрать из группировки ЗаказID, то этот запрос выведет клиентов у которых не более 2 заказов. А задача вывести первые 2.
Osmor рулит forever | |
|
| |
|
|
|
| А так?
SELECT Min(ЗаказID), Max(ЗаказID), КлиентID FROM Заказы GROUP BY КлиентID;
Или First(), Last() | |
|
| |
|
|
|
| странно, а мне показалось что должно получиться...
Если использовать функцию типа как в нумерации строк
http://hiprog.com/index.php?option=com_content&task=view&id=378&Itemid=35
то запрос получится проще | |
|
| |