sql - SQL 查找 Orders 表中每一行的下一个订单日期
问题描述
我有一个订单表。每个订单都附有一个日期和一个 customer_id。
我试图确定有多少情况下客户的订单间隔超过 365 天。
我的解决方案如下,将订单表留给自己,以确定用户的下一个订单;但是,这运行得非常慢并且感觉非常低效:
SELECT
COUNT(*)
FROM (
SELECT
transactions.customer_id,
transactions.transaction_date,
DATEDIFF(day, transactions.transaction_date, MIN(next_transactions.transaction_date)) days_to_next_transaction
FROM (
SELECT
customer_id,
transaction_date
FROM
transactions_table
) transactions
LEFT JOIN (
SELECT
customer_id,
transaction_date
FROM
transactions_table
) next_transactions
ON
transactions.customer_id = next_transactions.customer_id AND
transactions.transaction_date < next_transactions.transaction_date;
)
WHERE
days_to_next_transaction > 365
从理论上讲,我觉得我可以按customer_id
然后对我的订单列表进行排序transaction_date
。从这里我只需要对所有行进行一次传递:我会将一行与紧随其下的行进行比较 - 如果下一行与我当前行共享相同的 customer_id,我将计算下一笔交易的天数作为下一列中日期之间的差异 - 当前日期。
有什么方法可以实现吗?
解决方案
推荐阅读
- javascript - app.locals 返回变量名而不是字符串
- asp.net - 运行 Oracle 存储过程时出现 ASP.NET 访问被拒绝错误
- php - 不打印多个复选框php
- django - 优化 Django 中的压缩迁移
- mysql - MySQL:根据另一个表更新正在运行的“帐户余额”
- python - TypeError:需要一个类似字节的对象,而不是 Python 中 Image 命令的“str”
- angular - 如何使垫表行拖放与 cdkDragHandle 一起使用,以便只能使用句柄拖动行?
- docker - Docker 文件夹权限 - Tar 错误 - 权限错误
- angularjs - Ionic v3 polyfill.js 未捕获的承诺错误
- wordpress - 在 Wordpress 中安装 Google 标记管理器(无需编写 PHP 主题)