0

我有一份要做的事情清单,想把它分解成人们每天可以做的事情。此数据在 2 个表中

所以我有 2 个表 第一个是要做的事情的列表
表 1

task 
-----------
job a 
job b
job c
...
job z

表 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 中工作

4

1 回答 1

0

使用另一个表:table3 具有整数序列 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

row_number()请注意,从 PostgreSQL 版本 8.4 开始可以使用诸如窗口函数。

于 2012-05-24T03:30:09.670 回答