我有这个查询给了我不止一个结果。我想编辑它,以便它只给每个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'
为实现这一目标,我需要做些什么改变?
答案 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;