Postgresql 列出一个人的工作和他每天能做的工作
我有一个要做的事情的清单,我想打破它,把它分为不同的人,以及他们每天可以做的事情。该数据在两个表中 因此,我有两张表,第一张是要做的事情列表Postgresql 列出一个人的工作和他每天能做的工作,postgresql,Postgresql,我有一个要做的事情的清单,我想打破它,把它分为不同的人,以及他们每天可以做的事情。该数据在两个表中 因此,我有两张表,第一张是要做的事情列表 表1 表2列出了人们每天可以做的事情和我的事情 person | date | amount ------- -------- ---------- Mike 05/23/12 3 Paul 05/23/12 2 Mike 05/24/12 1 Paul 05/24/12 3 ... Mike 06/01/12 6
表1 表2列出了人们每天可以做的事情和我的事情
person | date | amount
------- -------- ----------
Mike 05/23/12 3
Paul 05/23/12 2
Mike 05/24/12 1
Paul 05/24/12 3
...
Mike 06/01/12 6
Paul 06/01/12 9
所以我想要的是
Order_id| Person |date |task
-------- --------- --------- -----------
1 Mike 05/23/12 job a
2 Mike 05/23/12 job b
3 Mike 05/23/12 job c
4 Paul 05/23/12 job d
5 Paul 05/23/12 Job e
6 Mike 05/24/12 job f
7 Paul 05/24/12 job g
...
26 Mike 06/01/12 job z
我不知道该怎么办。我在Postgres 8.4中使用另一个表:表3包含整数序列1到(最大数量),您可以查询它 表3的样本
seq
-----
1
2
3
4
...
9
10
11
...
查询示例
select
sub1.Order_id,
sub2.Person,
sub2.date,
sub1.task
from
(
select
row_number() over(order by task) as Order_id,
task
from table1
order by task
) as sub1
inner join
(
select
row_number() over(order by table2.date, table2.person) as Order_id,
table2.person,
table2.date,
table2.amount,
table3.seq
from table2
inner join table3
on table2.amount >= table3.seq
) as sub2
on sub1.Order_id = sub2.Order_id
请注意,自PostgreSQL 8.4版以来,诸如行号()等窗口函数可用
select
sub1.Order_id,
sub2.Person,
sub2.date,
sub1.task
from
(
select
row_number() over(order by task) as Order_id,
task
from table1
order by task
) as sub1
inner join
(
select
row_number() over(order by table2.date, table2.person) as Order_id,
table2.person,
table2.date,
table2.amount,
table3.seq
from table2
inner join table3
on table2.amount >= table3.seq
) as sub2
on sub1.Order_id = sub2.Order_id