Подсчет количества первых заказов, купленных клиентами - PullRequest
0 голосов
/ 27 января 2019

Я пытался решить эту проблему с кодированием, и, хотя я продолжаю приближаться, у меня не получается ее получить.

У меня есть две таблицы

Таблица 1 - Продукты

Столбцы:

Vendor Id, Vendor Name, Product Id, Product Name, Brand

Таблица 2 - Заказы

Столбцы:

Customer Id, OrderDateTime, Product Id, Vendor Id

Я пытаюсь выяснить, сколько было "первых покупок" закаждый продукт по поставщику

SELECT B.PRODUCTID, B.PRODUCTNAME, B.BRAND, B.VENDOR , COUNT(DISTINCT(B.CUSTOMERID)) AS 'FIRST PURCHASE COUNT' 
FROM
(SELECT A.CUSTOMERID, MIN(A.ORDERDATETIME) AS FIRSTPURCHASE, A.VENDORID, A.PRODUCTID, C.PRODUCTNAME, C.BRAND, C.VENDORNAME
FROM ORDERS A

JOIN PURCHASES C
ON C.VENDORID = A.VENDORID

GROUP BY A.CUSTOMERID, A.VENDORID, C.PRODUCTID) AS B

GROUP BY B.PRODUCTID, B.VENDORID

Я хотел бы создать результаты в следующих столбцах:

Product Id, Product Name, Brand, Vendor Name, First Purchase Count

Я также хотел бы, чтобы вывод Vendor Name был «куплен у vendorxyz», а непросто 'vendorxyz', где 'vendorxyz' - это имя поставщика, а там, где нет поставщика, в списке выводится «другой поставщик»

Любая помощь будет принята с благодарностью

1 Ответ

0 голосов
/ 27 января 2019

Следующий запрос может быть тем, что вы ищете (я не смог проверить его, поскольку вы не предоставили пример данных и ожидаемый вывод).

Используется предложение NOT EXISTSс коррелированным подзапросом для поиска в таблице заказов первого заказа каждого клиента, а затем агрегирует по продукту и поставщику.

SELECT 
    p.ProductId, 
    p.ProductName, 
    p.Brand, 
    p.VendorName, 
    COUNT(o.ProductId) FirstPurchaseCount
FROM
    Products p
    INNER JOIN Orders o
        ON  o.ProductId  = p.ProductId
        AND o.VendorName = p.VendorName
        AND NOT EXISTS (
            SELECT 1 
            FROM Orders o1 
            WHERE 
                o1.CustomerId = o.CustomerId 
                AND o1.OrderDateTime < o.OrderDateTime
        )
GROUP BY    
    p.ProductId, 
    p.ProductName, 
    p.Brand, 
    p.VendorName
...