2012-11-26 145 views
-2

我正在爲正在建立的店鋪創建租賃系統。我需要的其中一個問題是找到過去12個月租用最多的客戶。我有date_out和date_in列和一個數字來表示客戶的租金數量。Oracle SQL +查詢

表:客戶(列:姓名,電話)&交易(date_out,date_in)

我將與TO_DATE日期。

有沒有人知道我會怎麼做呢?

編輯:目前它只顯示1作爲rent_count,而不是我輸入的num_of_rents 8。

+0

請將您的表格結構和一些示例數據添加到您的問題 –

+0

表格:Customer(列:name,phone,num_of_rents)事務(列:date_out,date_in)日期插入:INSERT INTO TRANSACTION_T VALUES(TO_DATE('24 -MAY ''''DD-MON-YYYY'),TO_DATE('23 -AUG-2011','DD-MON-YYYY')); – user1853923

+1

請更新您的問題,並且不要在評論中添加太多的代碼。 –

回答

0
select customer_name, count(num_of_rents) as rent_count 
from customers 
where (SYSDATE - customer_DOB) <= 365 
group by customer_name 
order by rent_count desc 
0

那些是你的實際表,如果是這樣,他們不適合的目的,您至少需要某種兩者之間的聯繫。

至少你會需要沿着這些線。

CREATE TABLE customers (customer_id number(8), customer_name VARCHAR2(30), phone VARCHAR2(10)); 

CREATE TABLE rents (customer_id number(8), rent_id number(8), date_from DATE, date_to DATE); 

INSERT INTO customers (customer_id, customer_name, phone) VALUES (1, 'Test Customer', '1234'); 

INSERT INTO rents (customer_id, rent_id, date_from, date_to) VALUES (1,1,TO_DATE('01/03/2011','DD/MM/YYYY'), TO_DATE('02/03/2011','DD/MM/YYYY')); 
INSERT INTO rents (customer_id, rent_id, date_from, date_to) VALUES (1,1,TO_DATE('01/04/2012','DD/MM/YYYY'), TO_DATE('05/04/2012','DD/MM/YYYY')); 
INSERT INTO rents (customer_id, rent_id, date_from, date_to) VALUES (1,2,TO_DATE('16/08/2012','DD/MM/YYYY'), TO_DATE('17/08/2012','DD/MM/YYYY')); 

SELECT customer_name, count(rent_id) FROM customers 
    JOIN rents on customers.customer_id = rents.customer_id 
WHERE DATE_TO BETWEEN SYSDATE-365 AND SYSDATE 
GROUP BY customer_name; 

你需要tweek WHERE子句取決於什麼構成了你的上下文,即剛剛開始的時期,在一個時期或兩者結束的租金出租。