Sql 使用check根据日期连接表
我在PostgreSQL中有两个表: 零件的需求量:Sql 使用check根据日期连接表,sql,postgresql,Sql,Postgresql,我在PostgreSQL中有两个表: 零件的需求量: demandid partid demanddate quantity 40 125 01.01.17 10 41 125 05.01.17 30 42 123 20.06.17 10 orderid partid orderdate quantity
demandid partid demanddate quantity
40 125 01.01.17 10
41 125 05.01.17 30
42 123 20.06.17 10
orderid partid orderdate quantity
1 125 07.01.17 15
54 125 10.06.17 25
14 122 05.01.17 30
零件的订单:
demandid partid demanddate quantity
40 125 01.01.17 10
41 125 05.01.17 30
42 123 20.06.17 10
orderid partid orderdate quantity
1 125 07.01.17 15
54 125 10.06.17 25
14 122 05.01.17 30
基本上,零件的需求说明要买什么,零件的订单说明我们买了什么。我们可以购买未按需列出的零件
我需要一份报告,其中显示了我的所有零件在Demans_的零件和多少个星期过去了,因为最近的匹配行在订单_的零件。注意数量字段在这里是无关的
预期结果是(如果每个零件有多行显示旧零件):
我认为棘手的部分是每张桌子有一行。但这很容易在上使用
distinct。然后你需要计算月份。为此,您可以使用age()
:
select dp.partid, dp.date,
(extract(year from age(dp.date, op.date))*12 +
extract(month from age(dp.date, op.date))
) as months
from (select distinct on (dp.partid) dp.*
from demans_for_parts dp
order by dp.partid, dp.date desc
) dp left join
(select distinct on (op.partid) op.*
from Orders_for_parts op
order by op.partid, op.date desc
) op
on dp.partid = op.partid;
你喜欢什么
with o as (
select distinct partid, max(orderdate) over (partition by partid)
from Orders_for_parts
)
, p as (
select distinct partid, min(demanddate) over (partition by partid)
from Demans_for_parts
)
select p.partid, min as demanddate, date_part('day',o.max - p.min)/7
from p
left outer join o on (p.partid = o.partid)
;
它每部分给我很多行。。。每个零件不得超过1行。在这种情况下,月数的含义是什么?我不明白为什么它显示负值。我想看到的是我们上次购买零件的几周过去了,也就是说,这几周过去了,因为我们的零件订单创下了最近(新)的记录part@user2641077 . .. 日期的顺序不对。谢谢,我还是有点麻烦。dp.commitdate描述不正确,应该是ASC,因为我想要最早的需求。。。更改后,我无法使年龄正常工作(以周值为单位)