2013-10-10 3 views
0

Я попытаюсь сделать так, чтобы это сделать.Основной запрос, Просмотр вопросов

0д. Назад создать анкету, которая отобразит 10 лучших продуктов, наиболее продаваемых за последние 6 месяцев.

CREATE VIEW Top10product6month_VW AS 
SELECT ProductID 
FROM (select ProductID,SYSDATE - OrderDate AS OrderAge 
     from DD_OrderLine 
     WHERE SYSDATE - OrderDate <= 183) 
Where ROWNUM <= 10; 

, и я не мог получить top10.

Мой OrderLine стол

CREATE TABLE DD_OrderLine 
(
OrderDate DATE, 
SUMofPrice NUMBER(8,2), 
OrderID NUMBER(6), 
ProductID NUMBER(6), 
CONSTRAINT DD_orderid_productid_pk PRIMARY KEY (OrderID,ProductID) 
); 

и записи

INSERT INTO DD_OrderLine (OrderDate,SUMofPrice, QuantityPurchased,OrderID,ProductID) 
VALUES ((to_date('2013/9/25', 'yyyy/mm/dd')),000010.00,1,000117,001116); 
-- 
INSERT INTO DD_OrderLine (OrderDate,SUMofPrice, QuantityPurchased,OrderID,ProductID) 
VALUES ((to_date('2013/9/14', 'yyyy/mm/dd')),000010.00,1,000118,001112); 
-- 
INSERT INTO DD_OrderLine (OrderDate,SUMofPrice, QuantityPurchased,OrderID,ProductID) 
VALUES ((to_date('2013/9/14', 'yyyy/mm/dd')),000010.00,1,000118,001111); 
-- 
INSERT INTO DD_OrderLine (OrderDate,SUMofPrice, QuantityPurchased,OrderID,ProductID) 
VALUES ((to_date('2013/9/15', 'yyyy/mm/dd')),000010.00,1,000119,001111); 

INSERT INTO DD_OrderLine (OrderDate,SUMofPrice, QuantityPurchased,OrderID,ProductID) 
VALUES ((to_date('2013/9/15', 'yyyy/mm/dd')),000010.00,1,000119,001112); 

INSERT INTO DD_OrderLine (OrderDate,SUMofPrice, QuantityPurchased,OrderID,ProductID) 
VALUES ((to_date('2013/9/24', 'yyyy/mm/dd')),000010.00,1,000120,001115); 

INSERT INTO DD_OrderLine (OrderDate,SUMofPrice, QuantityPurchased,OrderID,ProductID) 
VALUES ((to_date('2013/9/24', 'yyyy/mm/dd')),000010.00,1,000120,001114); 

INSERT INTO DD_OrderLine (OrderDate,SUMofPrice, QuantityPurchased,OrderID,ProductID) 
VALUES ((to_date('2013/9/24', 'yyyy/mm/dd')),000010.00,1,000120,001113); 

INSERT INTO DD_OrderLine (OrderDate,SUMofPrice, QuantityPurchased,OrderID,ProductID) 
VALUES ((to_date('2013/9/24', 'yyyy/mm/dd')),000010.00,1,000120,001112); 
---- 
INSERT INTO DD_OrderLine (OrderDate,SUMofPrice, QuantityPurchased,OrderID,ProductID) 
VALUES ((to_date('2013/9/24', 'yyyy/mm/dd')),000010.00,1,000120,001111); 

INSERT INTO DD_OrderLine (OrderDate,SUMofPrice, QuantityPurchased,OrderID,ProductID) 
VALUES ((to_date('2013/9/24', 'yyyy/mm/dd')),000010.00,1,000120,001116); 

INSERT INTO DD_OrderLine (OrderDate,SUMofPrice, QuantityPurchased,OrderID,ProductID) 
VALUES ((to_date('2013/9/24', 'yyyy/mm/dd')),000010.00,1,000120,001117); 

INSERT INTO DD_OrderLine (OrderDate,SUMofPrice, QuantityPurchased,OrderID,ProductID) 
VALUES ((to_date('2013/9/30', 'yyyy/mm/dd')),000010.00,1,000121,001112); 

INSERT INTO DD_OrderLine (OrderDate,SUMofPrice, QuantityPurchased,OrderID,ProductID) 
VALUES ((to_date('2013/9/30', 'yyyy/mm/dd')),000010.00,1,000122,001112); 

Есть ли какие-либо способы для подсчета числа ProductID и сделать топ-10?

Спасибо большое

+1

Что это значит: «не смог получить 10 лучших»? Вы получили 20 лучших? У вас есть только 7 различных значений productID, поэтому в лучшем случае вы получите 7 лучших. Тем не менее, я не вижу, где в вашем запросе вы пытаетесь определить что-то сверху. Я бы ожидал увидеть в нем 'group by' и' order by'. – mustaccio

ответ

0

Как насчет:

SELECT ProductID 
FROM (select ProductID, SUM(QuantityPurchased) AS cnt 
     from DD_OrderLine 
     WHERE SYSDATE - OrderDate <= 183 
     GROUP BY ProductID 
     ORDER BY cnt DESC) 
Where ROWNUM <= 10; 
+0

Ницца. Я бы сделал «SYSDATE> ADD_MONTHS (SYSDATE, -6)», как в сторону. – adona9

0

К сожалению, вы не можете указать ORDER BY пункта в целях Oracle (Here more details, поиск ORDER BY и вы найдете его)

В любом случае, если вам нужен запрос, в котором вы храните десятку результатов, даже если вы не заказали, вы можете использовать:

CREATE VIEW Top10product6month_VW 
AS 
SELECT ProductID 
    FROM (select ProductID, 
       SYSDATE - OrderDate AS OrderAge 
      from DD_OrderLine 
     WHERE SYSDATE - OrderDate <= 183 
     order by QuantityPurchased desc) 
Where ROWNUM <= 10; 
+0

Большое вам спасибо. Я ДЕЙСТВИТЕЛЬНО ЦЕНЮ ТВОЮ ПОМОЩЬ. –

+0

Я просто пытаюсь быть суперкулопом, как ты :) – mucio

Смежные вопросы