- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 MySQL 工作台上编写一个查询,该查询显示客户上次从我客户的网站订购的时间。为此,我使用了两个表。一个称为“订单”,每当下达新订单时,它就会根据订单时间进行更新,并为每个新订单分配一个唯一的 ID。另一个表称为“orders_customers_details”,每当下新订单时也会更新该表,并包含下订单的客户的唯一 ID(基于客户的电子邮件地址和电话号码的组合)以及一个 key 对应订单表的id。
我的问题是我使用的查询没有返回每个客户的最新订单。对于某些客户,我会得到他们第四或第五个最近订单的日期。
我要在orders_customer_details上加入订单:
left join orders o
on ocd.id = o.customer_details_id
我还尝试使用左外连接和以下连接:
from orders o, orders_customers_details ocd
where o.customer_details_id = ocd.id
为了仅检索最近的订单,我按 customer_id HAVING max(order.id) 进行分组。仅供引用,order.id 随着每个新订单的下达而增加,因此 id 最高的订单是最近的订单。
我也尝试过
SELECT customer_id, MAX(order.id)
然后按customer_id分组,但无济于事。
这是完整的代码:
select customer_id, o.id as id_of_last_order, date(order_date) as
last_ordered, timestampdiff(day, order_date, now()) as
days_since_last_ordered
from orders o, orders_customers_details ocd
where o.customer_details_id = ocd.id
group by customer_id having max(o.id)
order by customer_id;
最佳答案
MySQL 中的典型方法是使用相关子查询来获取最近的订单:
select ocd.customer_id, o.id as id_of_last_order,
date(o.order_date) as last_ordered,
timestampdiff(day, o.order_date, now()) as days_since_last_ordered
from orders o join
orders_customers_details ocd
on o.customer_details_id = ocd.id
where o.order_date = (select max(o2.order_date)
from orders o2 join
orders_customers_details ocd2
on o2.customer_details_id = ocd2.id
where oc2.customer_id = ocd.customer_id
)
order by ocd.customer_id;
当然,如果o.id
是自动递增列,则最大值来自最近的日期。如果是这种情况,那么您可以使用聚合:
select ocd.customer_id,
max(o.id) as id_of_last_order,
date(max(o.order_date)) as last_ordered,
timestampdiff(day, max(o.order_date), now()) as days_since_last_ordered
from orders o join
orders_customers_details ocd
on o.customer_details_id = ocd.id
group by ocd.customer_id
order by ocd.customer_id;
在 MySQL 8+ 中,您只需使用窗口函数:
select *
from (select ocd.customer_id, o.id as id_of_last_order,
date(o.order_date) as last_ordered,
timestampdiff(day, o.order_date, now()) as days_since_last_ordered,
row_number() over (partition by ocd.customer_id order by o.order_date desc) as seqnum
from orders o join
orders_customers_details ocd
on o.customer_details_id = ocd.id
) ocd
where seqnum = 1
order by ocd.customer_id;
关于mysql - 您能否告诉我,我用来检索客户上次下订单时间的信息的查询出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56405072/
之前看到一些类似的问题,想弄清楚。 在this article ,据说异步调用“没有线程”。 然而,in another one ,据说 Here, however, we’re running th
我为我公司的平板电脑(SAMSUNG Galaxy Tab Active2)开发了一个简单的软件,自上周五(2018 年 11 月 23 日)以来,它无法正常工作。我检查了该应用程序的所有功能,其中有
我正在使用 hadoop map-reduce 作业进行一些文本处理。我的工作已完成 99.2%,并停留在上一个 map 工作上。 map 输出的最后几行如下所示。上次发生此问题时,我尝试打印出从 m
上次 Ubuntu 更新后有人对 Docker 有疑问吗?我有 2 个由 docker-compose 在 ubuntu18.04 中运行的项目。两个项目都运行良好,但在 *.yml 中进行 0 次更
SQL Developer 在表中显示公共(public)同义词的创建和上次 DDL 时间: CREATED 15-AUG-09 LAST_DDL_TIME 15-AUG-09 O
我正在使用带有以下插件的 mavenized 库项目: com.jayway.maven.plugins.android.generation2
我正在使用 Jssor Slider 作为轮播。在 Google Chrome 上次更新到版本 45.0.2454.85 之前,它一直运行良好。想法是它不显示图像。目前,它们位于标签中,可在 Safa
我是一名优秀的程序员,十分优秀!