2017-07-11 108 views
0

第一排我在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%被送到

0123被送到

我需要一个查询,它会显示我的第一个日期,其中每个订单发送超过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%) 

我怎样才能做到这一点?

回答

1

您可以使用distinct on

select distinct on (t.idshipment) t.* 
from t 
where t.percent_sent >= 75 
order by t.idshipment, t.percent_sent asc; 
0

尝试是这样的:

SELECT iorder, MIN("date") AS "date" 
    FROM your_view 
    WHERE percent_sent >= 75 
    GROUP BY iorder 
+0

是啊,没错,纠正。 –

0

使用group by,让每idorderMIN()只有一个记录选择的最早日期

聚集 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 
+0

你说得对。谢谢你的提示。我更新了查询。 –