smp*_*lay 4 postgresql group-by
我有一个表order(orderid,ordernumber,clientid,orderdesc等),以及order_status表上该订单的相应状态(statusid,orderid,statusdesc,statusNote,statustimestamp)
说我有如下记录
orderid orderumber clientid orderdesc
1111 00980065 ABC blah..blah..
Run Code Online (Sandbox Code Playgroud)
和相应的状态条目
statusid orderid statusdesc statusNote statustimestamp
11 1111 recvd status blah yyyy-mm-dd:10:00
12 1111 clientproce status blah yyyy-mm-dd:11:00
13 1111 clientnotice status blah yyyy-mm-dd:15:00
14 1111 notified status blah yyyy-mm-dd:17:00
Run Code Online (Sandbox Code Playgroud)
如何获得以下结果(最新时间戳和多列)
1111 14 00980065 ABC blah..blah.. notified status blah yyyy-mm-dd:17:00
Run Code Online (Sandbox Code Playgroud)
Postgresql通过其(非标准SQL)DISTINCT ON为您提供多个子选择的简单得多的替代方法:
SELECT
DISTINCT ON (o.orderid)
o.orderid, s.statusid, o.clientid, o.orderdesc,
s.statusdesc, s.statusnote, s.statustimestamp
FROM order o, status s
WHERE s.orderid = o.orderid
ORDER BY o.orderid, s.statustimestamp DESC;
Run Code Online (Sandbox Code Playgroud)
假设每个order人至少有一个status。在其他地方,如果您还想显示没有状态的订单,则可以进行外部联接。