MySQL查询。给出最近的日期到现在

时间:2012-12-03 15:28:54

标签: mysql

我有这个查询给了我不止一个结果。我想编辑它,以便它只给每个o.Customer_ID一个结果,然后使用o.OrderPlaceServerTime与今天最接近的顺序。

这是我的查询:

SELECT
    o.Order_ID,
    o.Customer_ID,
    o.OrderPlaceServerTime,
    o.CustomerOrderTotal
FROM 
    Orders o
    LEFT JOIN Order_LineDetails oln 
    ON oln.Order_ID = o.Order_ID
WHERE 
    o.OrderPlaceServerTime >= '2012-09-01 00:00:00'
AND o.OrderPlaceServerTime <= '2012-12-01 00:00:00'
AND o.CustomerOrderTotal >= '50'
AND oln.Product_ID = '75'

为实现这一目标,我需要做些什么改变?

2 个答案:

答案 0 :(得分:1)

  

我想编辑它,以便每个o只给我一个结果.Customer_ID

因此,首先您应该获得合格客户ID的最新订单,方法是按客户ID对合格订单进行分组,然后选择max或OrderPlaceServerTime。然后,您将使用客户ID和OrderPlaceServerTime上的订单加入这些记录,以选择其他两个感兴趣的属性。

SELECT
    o.Order_ID,
    o.Customer_ID,
    o.OrderPlaceServerTime,
    o.CustomerOrderTotal
FROM 
    Orders o
    JOIN (
        SELECT
            o.Customer_ID,
            MAX(o.OrderPlaceServiceTime) 'MaxOrderPlaceServiceTime'
        FROM 
            Orders o
            LEFT JOIN Order_LineDetails oln 
            ON oln.Order_ID = o.Order_ID
        WHERE 
            o.OrderPlaceServerTime >= '2012-09-01 00:00:00'
        AND o.OrderPlaceServerTime <= '2012-12-01 00:00:00'
        AND o.CustomerOrderTotal >= '50'
        AND oln.Product_ID = '75'
        GROUP BY o.Customer_ID
    ) AS A
    ON 
        o.Customer_ID = A.Customer_ID AND 
        o.OrderPlaceServiceTime = A.MaxOrderPlaceServiceTime

答案 1 :(得分:0)

如果我理解你需要什么,这应该是查询:

    SELECT * FROM 

    ( SELECT
    o.Order_ID,
    o.Customer_ID,
    o.OrderPlaceServerTime,
    o.CustomerOrderTotal
    FROM 
        Orders o
        LEFT JOIN Order_LineDetails oln 
        ON oln.Order_ID = o.Order_ID
    WHERE 
        o.OrderPlaceServerTime >= '2012-09-01 00:00:00'
    AND o.OrderPlaceServerTime <= '2012-12-01 00:00:00'
    AND o.CustomerOrderTotal >= '50'
    AND oln.Product_ID = '75'    
    ORDER BY o.Customer_ID, o.OrderPlaceServerTime DESC ) AS tab1   

    GROUP BY o.Customer_ID;