может кто-нибудь сгенерировать запрос для меня. Допустим, у меня есть таблица sales (saleID, date_of_sales, customerID, itemID, saleprice)
date_of_sales - это поле datetime, в котором хранится время продажи.
customerID - self exlpaining сообщает, кому был продан товар.
itemID - это идентификатор проданного товара.
saleprice - это цена, которая была продана.
Я хочу построить запрос, который выдаст детали последней покупки для каждого клиента. это можно сделать, используя date_of_sales.
Пример таблицы
saleID | date_of_sales | customerID | itemID | SalePrice
101 | 2008-01-01 | C2000 | I200 | 650 |
102 | 2010-01-01 | C2000 | I333 | 200 |
103 | 2007-01-01 | C3333 | I111 | 800 |
104 | 2009-12-12 | C3333 | I222 | 100 |
это пример таблицы данных, для простоты всего два клиента.
Клиент C2000 сделал свою последнюю покупку 2010-01-01
клиент C3333 сделал свою последнюю покупку on 2009-12-12
Я хочу получить такой результат
customerID | date_of_sales | itemID | SalePrice
C2000 | 2010-01-01 | I333 | 200 |
C3333 | 2009-12-12 | I222 | 100 |
Это может быть то, что вы ищете...
SELECT *
FROM sales
WHERE sales.date_of_sales = (SELECT MAX(date_of_sales)
FROM sales s2
WHERE s2.customerID = sales.customerID);
Есть небольшая проблема с этим; если в тот же день было два продаж одному и тому же клиенту, вы получите две строки (если только ваш столбец с датой продажи не включает время). Я думаю, что то же самое относится и к ответу выше.
Кроме того, если вы хотите получать результаты на основе только SINGLE записи максимальной даты, я бы использовал запрос by @Sachin Shanbhag выше, но также добавьте максимальное значение идентификатора продаж... Поскольку это будет подразумеваться как последовательный, в зависимости от того, что было введено последним, вероятно, было бы самым последним.
SELECT S.* FROM
sales S
INNER JOIN
( SELECT
customerID,
MAX(date_of_sales) dos,
MAX(SalesID) maxSale
FROM
sales
GROUP BY customerID
) S2 ON S.customerID = S2.customerID
AND S.date_of_sales = S2.dos
AND S.SalesID = S2.maxSale