如何选择满足条件

时间:2017-07-11 11:15:37

标签: sql postgresql

我在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%)

我该怎么做?

3 个答案:

答案 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