SQL创建视图,加入2个具有不同标准的表

时间:2014-05-14 03:04:49

标签: sql db2

我想创建一个视图来连接2个表,并在各个表中添加条件。

table 1: 

id  wonum  datetime     type   
---|-----|------------|--------|

1  | 10  | 04/03/2009 | pm     | 

2  | 11  | 04/03/2009 | cm     | 

3  | 12  | 04/03/2009 | pm     | 

4  | 13  | 01/01/2009 | pm     |

table 2: 

wonum    asset   
-------|-------|

10     | A1  | 

10     | A2  | 

11     | A1  | 

12     | A1  | 

12     | A2  | 

12     | A3  | 

13     | A1  | 

我想创建一个视图,将table2,资产字段分组,并在table1中找到最新日期,并在相应字段中显示最新日期。

目前,我可以使用以下SQL检索分组和最新日期的记录,但无法检索table1上的相应数据,例如type和wonum:

select asset1,max(datetime)from (
select b.asset as asset1, a.datetime as datetime from table1 a, table2 b
where a.wonum = b.wonum )
group by asset11

目前我正在使用IBM db2来创建视图。请提出建议。非常感谢提前。

此致

2 个答案:

答案 0 :(得分:0)

您可以通过删除子查询来简化查询:

  select b.asset, max(a.datetime)
  from table1 a join
       table2 b 
       on a.wonum = b.wonum
  group by b.asset;

相反,您可以使用row_number()函数:

select ab.*
from (select b.asset, a.*
             row_number() over (partition by b.asset order by a.datetime desc) as seqnum
      from table1 a join
           table2 b 
           on a.wonum = b.wonum
     ) ab
where seqnum = 1;

我不确定你想要哪个字段,但你应该能够得到你需要的任何字段。

答案 1 :(得分:0)

如何简化查询,在select和group中添加必填字段:

SELECT b.asset as asset1, a.type, a.wonum, max(a.datetime)
FROM table1 a, table2 b
WHERE a.wonum = b.wonum
GROUP BY b.asset, a.type, a.wonum