построение запроса для следующей таблицы

0

может кто-нибудь сгенерировать запрос для меня. Допустим, у меня есть таблица 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 |

Теги:

2 ответа

1
Лучший ответ

Это может быть то, что вы ищете...

SELECT *
    FROM sales
    WHERE sales.date_of_sales = (SELECT MAX(date_of_sales)
                                     FROM sales s2
                                     WHERE s2.customerID = sales.customerID);

Есть небольшая проблема с этим; если в тот же день было два продаж одному и тому же клиенту, вы получите две строки (если только ваш столбец с датой продажи не включает время). Я думаю, что то же самое относится и к ответу выше.

  • 0
    это работает отлично, спасибо Брайан
0

Кроме того, если вы хотите получать результаты на основе только 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
  • 0
    более простой способ решить проблему с записями, сделанными в один и тот же день, - это использовать время и в моем поле даты.
  • 0
    @karanits - да, но в этом случае поле даты содержит только часть даты, а не время. Однако, если date_of_sales - это полный столбец даты / времени, он будет автоматически зарегистрирован на всю дату + время с помощью совокупного вызова MAX ().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню