创建一个返回第一次出现的值的视图

时间:2015-01-29 18:10:00

标签: mysql sql sql-server-2008

我正在尝试创建一个返回第一次出现的值的视图。

我有两张桌子

 First table: 
sID | dt 
12  | DateTimeValue1
12  | DateTimeValue2

second table: 
S_ID 
12

我希望视图加入两个表并给我第一次出现S_ID(在本例中为DateTimeValue1)

我该如何做到这一点?

更多信息: 在表1中,我有两列sID和dt。这些列的值如下所示:

      sID: 1 dt: 2014-06-12 
      sID: 1 dt: 2014-06-13 
      sID 1 dt: 2014-06-14 etc... 

我想在我的视图中加入这两个表 其中S_ID与sID匹配,它返回第一个值(在本例中为2014-06-12)

对不起有任何困惑!

这是我到目前为止所得到的:

这是我到目前为止所得到的:

        CREATE VIEW view_name AS
        SELECT [S_ID]
        FROM table1
        LEFT JOIN table2
        ON table1.[S_ID]=table2.sID;

3 个答案:

答案 0 :(得分:1)

您可以执行以下操作:http://sqlfiddle.com/#!3/66ee02/1

create view theview as
select 
  t1.s_id, min(dt) dt
from  
  table1 t1 inner join 
  table2 t2 on t1.s_id = t2.s_id
group by 
  t1.s_id

答案 1 :(得分:0)

在MS SQL Server中,您可以选择table1的第一行,并在这样的视图中将其与table2连接:

create view view_name
as
select table1.*,table2.*
from table2 
     inner join
      (select top 1 *
       from table1
       order by table1.what_ever_field) as table1 
     on table2.id = table1.id

如果table2有table1的外键,这很有效。

如果它们是没有外键的独立表,您可以这样做:

create view view_name
as
select table1.*,table2.*
from (select top 1 * from table2 order by table2.field1) as table2
     ,
      (select top 1 * from table1 order by table1.field1) as table1 

答案 2 :(得分:0)

请尝试:

select t1.sID,min(t1.dt) from first_table t1, second_table t2 where  t1.sID=t2.sID group by t1.sID

我在sybase中尝试使用以下代码,但效果很好。

create table #temp1
(sID int,dt date)


create table #temp2
(sID int)

insert into #temp1
select 12,getdate()

insert into #temp1
select 12,getdate()

insert into #temp1
select 12,getdate()

insert into #temp2
select 12

insert into #temp1
select 13,getdate()

insert into #temp2
select 13

insert into #temp1
select 14,getdate()

insert into #temp1
select 14,getdate()


insert into #temp2
select 14


select * from #temp1
select * from #temp2


select t1.sID,min(t1.dt) from first_table t1,
second_table t2
where t1.sID=t2.sID
group by t1.sID