Продукты SQL / продукты продаж - PullRequest
0 голосов
/ 01 февраля 2009

Общий (я предполагаю?) Тип запроса:

У меня есть две таблицы («продукты», «продукты»). Каждая запись в «productsales» представляет продажу (поэтому она имеет «date», «number», «product_id»). Как мне эффективно сделать запрос, подобный следующему:

Получить названия продуктов всех продуктов, которые были проданы более X раз между датой Y и датой Z.

(X - количество проданных товаров, а не количество транзакций)

Ответы [ 4 ]

1 голос
/ 01 февраля 2009

Вышеуказанный запрос не совсем корректен ...

SELECT Name FROM Products
WHERE ProductId IN
( SELECT ProductId 
  FROM ProductSales
  WHERE ProductSales.Date BETWEEN  Y AND Z 
  GROUP BY ProductId
  HAVING SUM(ProductSales.Qty) > x
)
1 голос
/ 01 февраля 2009
 SELECT p.[name]
 FROM products p
 WHERE p.product_id in (SELECT s.product_id
     FROM productsales s
     WHERE s.[date] between @dateStart and @dateEnd
     GROUP BY s.product_id
     HAVING Sum(s.quantity) > @X )
0 голосов
/ 01 февраля 2009
SELECT p.[name]
FROM
products p
INNER JOIN
productsales ps
ON 
p.id = ps.product_id
WHERE
ps.date BETWEEN @Y AND @Z
GROUP BY
p.[name] 
--,p.id if it is likely that you have two products with the same name
HAVING
SUM(ps.quantity) > @X

Успешно протестировано с MS AdventureWorks DB , с использованием следующего -

DECLARE @Y DATETIME, @Z DATETIME, @X INT    

SET @Y = '2004-06-09'
SET @Z = '2004-08-01'
SET @X = 100

    SELECT p.[Name]
    FROM
    Production.Product p
    INNER JOIN
    Sales.SalesOrderDetail ps
    ON 
    p.ProductID = ps.ProductID
    WHERE
    ps.ModifiedDate BETWEEN @Y AND @Z
    GROUP BY p.Name
    HAVING
    SUM(ps.OrderQty) > @X
0 голосов
/ 01 февраля 2009

На самом деле, я думаю, что вы должны изучить группу по выражению

Самое простое утверждение было бы:

SELECT ps.product_id, COUNT(*) 
           FROM product_sales ps 
           WHERE ps.product_id = id AND ps.Date BETWEEN @Y AND @Z
           GROUP_BY product_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...