下面是我寫的一個程序,用於找出每位客戶每天購買的前10個項目。MySQL程序 - 開始工作
這是我嘗試過的第一個PL/SQL的東西,它沒有做我期待它做的事情。
我使用的邏輯是接受開始日期,結束日期&我對每位客戶感興趣的top'x'銷售額。然後循環訪問唯一客戶表 - cust_table
&找到每位客戶每天的最高'x'。
請問我可以請求指導,以得到這個工作嗎?
CREATE PROCEDURE `at _the _top`(in stDate date, in edDate date, in lim int)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE cust TEXT;
DECLARE custNames CURSOR FOR SELECT CUSTOMER FROM cust_table;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN custNames;
read_loop: LOOP
FETCH custNames INTO cust;
IF done THEN
LEAVE read_loop;
END IF;
WHILE(stDate <= edDate) DO
#insert into top_cust(EVE_DATE,CUST_NAME,ITEM_ID,ITEMS_PURCHASED) (select EVE_DATE, CUST_NAME, ITEM_ID, SUM(ITEM_BUNDLE_SIZE) as ITEMS_PURCHASED_TOTAL from cust_sales_hist where EVE_DATE = stDate and CUST_NAME = cust group by EVE_DATE, ITEM_ID order by ITEMS_PURCHASED_TOTAL desc limit lim);
SELECT concat('Custome - ', cust);
SELECT CONCAT('Start Date - ', stDate);
SELECT CONCAT('End date - ', edDate);
SELECT CONCAT('Limit - ', lim);
SELECT
EVE_DATE,
CUST_NAME,
ITEM_ID,
SUM(ITEM_BUNDLE_SIZE) AS ITEMS_PURCHASED_TOTAL
FROM
cust_sales_hist
WHERE
EVE_DATE = stDate
AND CUST_NAME = cust
GROUP BY
EVE_DATE ,
ITEM_ID
ORDER BY
ITEMS_PURCHASED_TOTAL DESC
LIMIT
LIM;
SET stDate = date_add(stDate, INTERVAL 1 DAY);
end WHILE;
END LOOP;
CLOSE custNames;
END
這不是PL/SQL。 PL/SQL是Oracle數據庫中使用的過程語言。我不知道MySQL有自己的程序語言的特定名稱。 – sstan
不錯,有人在這個問題上保持關注,並關閉投票。做得好。它幫助到我。謝謝噸 – usert4jju7
沒有。只是這個問題實際上並不明確,*它並沒有說明我期望它做什麼。*並不是一個明確的問題陳述。在@sgeddes的回答下的回覆通常表明問題需要更多的信息/細節(樣本數據,期望的結果,通常......)。這不是你的第一個SQL問題,所以你現在應該知道更好的恕我直言。 – sstan