2012-11-26 148 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子句取决于什么构成了你的上下文,即刚刚开始的时期,在一个时期或两者结束的租金出租。