Intereting Posts
Как сделать оповещение по электронной почте, как календарь Google? LOAD DATA INFILE для загрузки данных в разные таблицы Отобразить все дочерние записи родителя в DataGridView Вопросы о запросах и параметрах Dapper SQL с PostgreSQL Имеет ли Oracle 12 проблемы с локальными типами коллекций в SQL? Как найти «пробел» в работе счетчика с SQL? Уличные / SQL-группировки столбцов для нескольких столбцов, остальные столбцы основаны на самом низком / самом высоком столбце других столбцов Типы столбцов sqlite3 Листинг Тип NULL при обновлении нескольких строк Разделить столбец на несколько строк Группа MySQL по интервалам в диапазоне дат Как вставить текст с одинарной котировкой sql server 2005 Регулярное выражение для соответствия всем комментариям в скрипте T-SQL Контракты с кодом Microsoft: ошибка «CodeContracts: Diagnostic: Не удалось подключиться к любому кешу». Как отображать строки, которые при объединении равны нулю

Продукты SQL / продукты

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

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

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

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

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 ) 

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

 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 ) 

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

Простейшим утверждением было бы следующее:

 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; 
 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