获取所有订单,其中最后一个订单在mySql中超过一年

时间:2018-04-22 17:54:57

标签: mysql

我有一个mySQL表,它包含: CustomerId和OrderDate

一个CustomerId可以有多行 现在,我尝试获取CustomerId,其中只有最后一个OrderDate超过一年。 我尝试以下方法:

SELECT * 
FROM order 
WHERE OrderDate <=DATE_SUB(now(), Interval 1 Year) 
GROUP BY CustomerId 
ORDER BY OrderDate DESCC;

这里的问题是,我得到的所有行都超过了1年。 但正如我上面所说,我试图只获得最新订单,超过1年。 THX任何建议

3 个答案:

答案 0 :(得分:0)

订购行并限制为最后一行。此外,你有DESCC而不是DESC。

SELECT * 
FROM order 
WHERE OrderDate <=DATE_SUB(now(), Interval 1 Year) 
GROUP BY CustomerId 
ORDER BY OrderDate DESC
LIMIT 1;

您也可以尝试此查询:

SELECT 
    `CustomerId`,
    `CustomerName`, //  Add other fields you want returned.
    MAX(`OrderDate`)
FROM `order` 
WHERE `OrderDate` <= DATE_SUB(now(), Interval 1 Year) 
GROUP BY `CustomerId` 
ORDER BY MAX(`OrderDate`) DESC;

此外,这将返回每个客户的最后订单中的所有相关列:

SELECT *
FROM `order` a
JOIN (
    SELECT 
        `CustomerId`,
        MAX(`OrderDate`) as `maxdate`
    FROM `order` 
    WHERE `OrderDate` <= DATE_SUB(now(), Interval 1 Year) 
    GROUP BY `CustomerId`) b
ON a.`CustomerId` = b.`CustomerId` AND
    a.`OrderDate` = b.`maxdate`
ORDER BY `maxdate` DESC;

答案 1 :(得分:0)

试试这个子查询:

select customer_id from customer table where order_id in(Select order_id from (select order_id from order_table (year(now())-year(order_date)) = 1 order by order_date desc limit 1))

如果不起作用,请发布您的表格结构。

答案 2 :(得分:0)

THX提供所有提示。 最后,我找到了我的工作解决方案:

    SELECT
  *
FROM order a1
  INNER JOIN (SELECT
                order.Id
              FROM (SELECT
                      *
                    FROM (SELECT 
                          * 
                          FROM order 
                          WHERE OrderDate <= DATE_SUB(NOW(), INTERVAL 1 year) 
                            ORDER BY OrderDate DESC) AS Sub
                          GROUP BY Sub.CustomerId) AS a2) AS a3
    ON a1.id = a3.id;