-2

我正在为我正在建立的商店创建一个租赁系统。我需要的查询之一是找到在过去 12 个月中租用最多的客户。我有 date_out 和 date_in 列以及一个代表客户租金数量的数字。

表格:客户(列:姓名、电话)和交易(date_out、date_in)

我用 TO_DATE 插入日期。

有谁知道我会怎么做?

编辑:目前它只显示 1 作为rent_count,而不是我为 num_of_rents 输入的 8。

4

2 回答 2

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;

您将需要调整 WHERE 子句取决于在您的上下文中构成租金的内容,即刚开始在该期间的租金,在该期间结束的租金或两者兼而有之。

于 2012-11-26T17:07:12.820 回答
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
于 2012-11-26T16:06:54.993 回答