【发布时间】:2018-06-10 16:31:44
【问题描述】:
阅读一本关于 Sqlite 的书,并决定测试某些查询以获得乐趣。
这个让我思考。
你将如何返回以低于之前商品的价格购买新商品的连续购买者的数量?
不需要所有连接都在同一个表中。
相关表名:
day:购买日期,customer,price
到目前为止,我已经找到了连续的客户,但无法检查他们之前的购买情况。
SELECT * FROM (SELECT * FROM ORDERS GROUP BY CUSTOMER HAVING COUNT(*)>1);
认为通过将每个客户的购买添加到彼此相邻的列中,由date_bought 订购可能是进行实际“每个连续客户”检查的唯一方法。
为了重现性,你可以使用这个:
CREATE TABLE orders (
day DATE,
price FLOAT
item char
customer char
);
INSERT INTO orders(day, price,item,customer) VALUES(date('now', 'localtime', '-2 day'), 0.5,'food','Jenny');
INSERT INTO orders(day, price,item,customer) VALUES(date('now', 'localtime', '-23 day'), 1,'food','Jenny');
INSERT INTO orders(day, price,item,customer) VALUES(date('now', 'localtime', '-1 day'), 11,'food','Betty');
INSERT INTO orders(day, price,item,customer) VALUES(date('now', 'localtime', '-22 day'), 7,'food','Betty');
INSERT INTO orders(day, price,item,customer) VALUES(date('now', 'localtime', '-3 day'), 8,'food','Katy');
INSERT INTO orders(day, price,item,customer) VALUES(date('now', 'localtime', '-4 day'), 10,'food','Mary');
INSERT INTO orders(day, price,item,customer) VALUES(date('now', 'localtime', '-23 day'), 1,'food','Mary');
INSERT INTO orders(day, price,item,customer) VALUES(date('now', 'localtime', '-1 day'), 2,'food','Anna');
INSERT INTO orders(day, price,item,customer) VALUES(date('now', 'localtime', '-2 day'), 12,'food','Anna');
INSERT INTO orders(day, price,item,customer) VALUES(date('now', 'localtime', '-3 day'), 8,'food','Anna');
INSERT INTO orders(day, price,item,customer) VALUES(date('now', 'localtime', '-4 day'), 10,'food','Lisa');
INSERT INTO orders(day, price,item,customer) VALUES(date('now', 'localtime', '-5 day'), 5,'food','Lisa');
INSERT INTO orders(day, price,item,customer) VALUES(date('now', 'localtime', '-8 day'), 12,'food','Jenny');
【问题讨论】:
-
当您说不允许加入时,是否包括自加入?
-
我没有这么说,我说他们只是在同一张桌子上。自联接可能是解决问题的途径,但很难做到正确
标签: sql database sqlite subquery