Ниже приведен SQL-запрос для получения списка клиентов.Как вы можете видеть, я добавил строки, помеченные «- ДОБАВЛЕНО» - новое поле, объединение и порядок.Я пытаюсь отобразить одного клиента на строку в моем наборе результатов, но для каждого клиента я хочу отобразить самый последний заказ.Какой лучший способ сделать это?Должен ли я поставить где в моем JOIN или использовать ТОП 1?Я предполагаю, что есть несколько способов, но я хочу сделать его максимально эффективным.
SELECT
CONVERT(NVARCHAR(255),client.identifyingnumber) As [Client ID],
CONVERT(VARCHAR,client.name) As [Client Name],
client.clientid As [Id],
CONVERT(CHAR(10),[ecom_order].[order_date],101) -- ADDED
FROM
client
JOIN clientstatus ON client.clientstatusid = clientstatus.clientstatusid
JOIN clienttype ON clienttype.clienttypeid = client.clienttypeid
-- keep left outer join since some clients won't have any orders, thus no last order
LEFT OUTER JOIN [ecom_order] ON client.clientid = [ecom_order].clientid -- ADDED
WHERE
client.name LIKE '%_%'
AND
client.name <= (
SELECT MAX(maxsubquery.ordercolumn) FROM (
SELECT
TOP 10 client.name AS ordercolumn
FROM
client
JOIN clientstatus ON client.clientstatusid = clientstatus.clientstatusid
JOIN clienttype ON clienttype.clienttypeid = client.clienttypeid
WHERE
client.name LIKE '%_%'
ORDER BY client.name
)
AS maxsubquery)
ORDER BY
client.name,
[ecom_order].order_date DESC -- ADDED
Пример набора результатов испытаний:
