查询时遇到问题,无法返回具有 1 个以上订单的任何分组订单集的最新订单。下面是测试数据的创建和插入。
此查询返回我想要使用的唯一客户 ID 以及分组的 order_id。在这些记录中,我只需要最近的订单(基于 date_added)。
从 orderTable GROUP BY customer_id 中选择 COUNT(customer_id)、customer_id、GROUP_CONCAT(order_id),其中 COUNT(customer_id)>1 LIMIT 10;
mysql> SELECT COUNT(customer_id), customer_id, GROUP_CONCAT(order_id) FROM orderTable GROUP BY customer_id HAVING COUNT(customer_id)>1 LIMIT 10;
+--------------------+-------------+------------------------+
| COUNT(customer_id) | customer_id | GROUP_CONCAT(order_id) |
+--------------------+-------------+------------------------+
| 2 | 0487 | F9,Z33 |
| 3 | 1234 | 3A,5A,88B |
+--------------------+-------------+------------------------+
2 rows in set (0.00 sec)
我正在查找订单 Z33 (customer_id 0487) 和 3A (customer_id 1234)。
需要澄清的是,我不希望只订购过一次的客户收到订单。
任何帮助或提示让我指向正确的方向表示赞赏。
示例表数据:
--
--表orderTable
的表结构
如果不存在则创建表orderTable
(
customer_id
varchar(10) NOT NULL,
order_id
varchar(4) NOT NULL,
date_add
日期不为空,
主键(customer_id
、order_id
)
) ENGINE=MyISAM 默认字符集=latin1;
--
--转储表orderTable
的数据
插入orderTable
(customer_id
、order_id
、date_added
)值
('1234', '5A', '1997-01-22'),
('1234', '88B', '1992-05-09'),
('0487', 'F9', '2002-01-23'),
('5799', 'A12F', '2007-01-23'),
('1234', '3A', '2009-01-22'),
('3333', '7FHS', '2009-01-22'),
('0487', 'Z33', '2004-06-23');
================================================== ===========
最佳答案
澄清查询。 问题是只包括那些有更多订单的客户...因此我的查询将其包含在 GROUP BY 中...这样它只提供有多个订单的相关客户,但同时只提供该人最后一个订单的最近日期...然后,预查询通过公共(public)客户 ID 重新连接到订单表,但仅限于与预查询中检测到的最后日期匹配的订单。如果客户只有一个订单,则其内部 PreQuery 计数仅为 1,因此被排除在最终 PreQuery 结果集中。
select ot.*
from
( select
customer_id,
max( date_added ) as LastOrderDate,
from
orderTable
having
count(*) > 1
group by
customer_id ) PreQuery
join orderTable ot
on PreQuery.Customer_ID = ot.Customer_ID
and PreQuery.LastOrderDate = ot.date_added
关于mysql - SELECT 任意记录组的最新记录(忽略只有一条记录的记录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6217879/