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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了添加每个客户的旧购买列以进行比较相关的知识,希望对你有一定的参考价值。

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

这个让我思考。

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

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

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

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

这是假设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)
另一答案

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

and o1.day < o2.day

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

SELECT *

以上是关于添加每个客户的旧购买列以进行比较的主要内容,如果未能解决你的问题,请参考以下文章

索引postgresql数组列以进行大于/小于比较?

Pandas:如何比较导入的 csv 文件的列以确保它们相同?

您如何保留原始列以在 r 中两个数据库的 full_join() 中进行比较

SQL - 比较表中的日期

当他们使用 WooCommerce 进行购买时,如何将客户帐单信息添加到 MailChimp 组

如何管理在每个 git 版本中添加私有代码片段?