添加每个客户的旧购买列以进行比较

问题描述 投票:1回答:3

在Sqlite上读书并决定测试某些查询以获得乐趣。

这个让我思考。

如何获得价格低于之前商品的新商品的持续买家数量?

  • 没有联接需要它在同一个表中。
  • 相关的表名:qazxsw poi:约会,qazxsw poi,qazxsw poi

到目前为止,我找到了连续的客户,但无法检查他们以前的购买。

day

认为通过将customer订购的每个客户的购买添加到彼此相邻的列中,可能是进行实际“每持续客户”检查的唯一方法。

对于再现性,您可以使用:

price
sql database sqlite subquery
3个回答
0
投票

如果您只是想要计数并且不关心特定客户是谁,那么获得多次订购相同商品的客户数量的一种方式,以及稍后的较低价格,是使用相关的带有SELECT * FROM (SELECT * FROM ORDERS GROUP BY CUSTOMER HAVING COUNT(*)>1); 谓词的子查询:

date_bought

这将返回不同客户的计数,其中存在具有相同项目的行并且在较早的某天具有较高的价格。

如果我理解你的问题,我认为这就是你想要的。


0
投票

我的自我加入方法就是这样的。

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');

这是假设exists指的是他们最近订单上的一个项目。如果select count(distinct customer) from orders o1 where exists ( select customer from orders o2 where o1.customer = o2.customer and o1.item = o2.item and o1.day > o2.day and o1.price < o2.price ); 引用任何先前的订单,您可以将子查询替换为:

select your field
from orders o1 join orders o2 on o1.customer = o2.customer

where o2.price < o1.price
and o1.day = (select max(day)
from orders
where day < o2.day
and customer = o2.customer)

0
投票

您可以使用CTE。这将为您提供实际细节。如果你只想计数只需用their previous item替换最终的their previous item

and o1.day < o2.day

如果查看与之前购买的比较,那么这个替代方案:

SELECT *
© www.soinside.com 2019 - 2024. All rights reserved.