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