以下查询为我提供了针对三个网站的订单日期的地址。 如果我为网站完成了多个订单,我只想选择该网站的最新记录
SELECT DISTINCT ORDERS.Address, ORDERS.ORDERDATE
FROM ORDERS
Left JOIN PHONEDATA AS P
ON ORDERS.RECID = P.OrderID
where client IN ('site1','site2','site3')
结果
Address orderdate
------- -----------------------
Site1 2014-02-13 14:58:22.427
site1 2014-02-13 14:48:57.413
site1 2014-02-13 15:03:32.403
Site2 2014-02-13 13:48:22.427
site2 2014-02-13 13:30:57.413
site2 2014-02-13 13:03:32.403
Site3 2014-02-13 14:12:22.427
site3 2014-02-13 11:10:57.413
site3 2014-02-13 13:03:32.403
Site1 2014-02-14 14:58:22.427
site1 2014-02-14 14:48:57.413
site1 2014-02-14 15:03:32.403
Site2 2014-02-14 13:48:22.427
site2 2014-02-14 13:30:57.413
site2 2014-02-14 13:03:32.403
Site3 2014-02-14 14:12:22.427
site3 2014-02-14 11:10:57.413
site3 2014-02-14 13:03:32.403
预期结果
site1 2014-02-13 15:03:32.403
Site2 2014-02-13 13:48:22.427
Site3 2014-02-13 14:12:22.427
site1 2014-02-14 15:03:32.403
Site2 2014-02-14 13:48:22.427
Site3 2014-02-14 14:12:22.427
所以选择最新记录
更新:抱歉,我应该提到的,我想要那天的最新价值。 我已经更新了预期的结果,因此我不想选择site1的最新值,而是要显示给定日期的网站1的最新值,如果该网站有值,则每天重复一次
答案 0 :(得分:1)
试试这个:
SELECT ORDERS.Address, MAX(ORDERS.ORDERDATE) AS ORDERDATE
FROM ORDERS O
LEFT JOIN PHONEDATA AS P
ON O.RECID = P.OrderID
WHERE client IN ('site1','site2','site3')
GROUP BY ORDERS.Address
答案 1 :(得分:1)
使用以下查询:
SELECT ORDERS.Address, MAX(ORDERS.ORDERDATE)
FROM ORDERS
Left JOIN PHONEDATA AS P
ON ORDERS.RECID = P.OrderID
where client IN ('site1','site2','site3')
GROUP BY ORDERS.Address, CAST(ORDERS.OrderDate AS DATE)
答案 2 :(得分:0)
假设client
表中有orders
:
SELECT o.Address, o.ORDERDATE
FROM (select o.*, row_number() over (partition by client order by orderdate desc) as seqnum
from ORDERS o
) o Left JOIN
PHONEDATA P
ON o.RECID = P.OrderID
where o.client IN ('site1', 'site2', 'site3') and
o.seqnum = 1;
请注意,这将为您提供最新订单的地址以及日期。
编辑:
修改上述内容以便每天处理最近的事情很容易。唯一的变化是seqnum
:
SELECT o.Address, o.ORDERDATE
FROM (select o.*, row_number() over (partition by client, cast(orderdate as date)
order by orderdate desc
) as seqnum
from ORDERS o
) o Left JOIN
PHONEDATA P
ON o.RECID = P.OrderID
where o.client IN ('site1', 'site2', 'site3') and
o.seqnum = 1;