打破一个人可以做一天的工作和工作#的列表

时间:2012-05-23 22:53:40

标签: postgresql

我有一系列要做的事情,想要打破它,让它在人与人之间分开,以及他们一天可以做些什么。这个数据在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工作

1 个答案:

答案 0 :(得分:0)

使用另一个表:table3,其中包含整数1到(最大数量)的序列,您可以查询它。

table3的样本

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以来,row_number()等窗口函数可用。