我在PostgreSQL中有以下视图:
idshipment idorder quantity_order date quantity_in_shipment percent_sent
50 1 1020 1.1.16 432 42
51 1 1020 17.1.16 299 71
51 1 1020 20.1.16 144 85
51 1 1020 45.1.16 145 100
52 2 1 3.1.17 5 100
此视图显示每个订单的发货量。 例如:
idorder = 1由4次发货发送:
第一批货物的数量是432,这意味着42%的订单已发送
第二批货物的数量是299,这意味着71%的订单已发送
第三批货物的数量为144,这意味着85%的订单已发送
即将发货的数量为145,这意味着100%的订单已发送
我需要一个查询,它会显示第一个日期,其中每个订单的发送量超过75%。意思是每个订单只显示一行。 对于上述数据,我应该看到:
idorder date
1 20.1.16 (cause its 85% first time above 75%)
2 3.1.17 (cause its 100% first time above 75%)
我该怎么做?
答案 0 :(得分:1)
您可以使用distinct on
:
select distinct on (t.idshipment) t.*
from t
where t.percent_sent >= 75
order by t.idshipment, t.percent_sent asc;
答案 1 :(得分:0)
尝试这样的事情:
SELECT iorder, MIN("date") AS "date"
FROM your_view
WHERE percent_sent >= 75
GROUP BY iorder
答案 2 :(得分:0)
使用group by
每个idorder
只能获得一条记录,MIN()
通过选择最早的日期来汇总date
我创建了一个表格调用货件,其中包含您提供的数据: 并执行此查询
SELECT s.idorder, MIN(s.date) as date
FROM shipment s
WHERE percent_sent >= 75
GROUP BY s.idorder
结果:
idorder date
----------- ----------
1 2016-01-20
2 2017-03-01