繁体   English   中英

SELECT 任意 GROUP 记录的最新记录(忽略一条记录的记录)

[英]SELECT newest record of any GROUP of records (ignoring records with one record)

查询返回具有超过 1 个订单的任何分组订单的最新订单时遇到问题。 测试数据的 CREATE & INSERTs 如下。

此查询返回我要使用的唯一客户 ID,以及分组的 order_id。 在这些记录中,我只需要最近的订单(基于 date_add)。

SELECT COUNT(customer_id), customer_id, GROUP_CONCAT(order_id) FROM orderTable GROUP BY customer_id HAVING 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的表结构

CREATE TABLE IF NOT EXISTS orderTable ( customer_id varchar(10) NOT NULL, order_id varchar(4) NOT NULL, date_added date NOT NULL, PRIMARY KEY ( customer_id , order_id ) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--

-- 为表orderTable转储数据

INSERT INTO orderTable ( customer_id , order_id , date_added ) VALUES ('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 放在一起......这样它只会给有问题的客户提供多个订单,但同时只给出该人的最后一个订单的最近日期... 然后 PreQuery 通过公共客户 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM