创建一个 returns 值第一次出现的视图
Creating a View that returns the first occurrence of a value
我正在尝试创建一个 returns 值第一次出现的视图。
我有两个table
First table:
sID | dt
12 | DateTimeValue1
12 | DateTimeValue2
second table:
S_ID
12
我希望视图加入两个 table 并给我第一次出现 S_ID(在本例中为 DateTimeValue1)
我怎样才能做到这一点?
更多信息:
在 table 1 我有两列 sID 和 dt。这些列的值如下所示:
sID: 1 dt: 2014-06-12
sID: 1 dt: 2014-06-13
sID 1 dt: 2014-06-14 etc...
我想加入我认为的两个 table,这样
其中 S_ID 匹配 sID 它 returns 第一个值(在本例中为 2014-06-12)
抱歉造成任何混淆!
这是我目前得到的结果:
这是我目前得到的:
CREATE VIEW view_name AS
SELECT [S_ID]
FROM table1
LEFT JOIN table2
ON table1.[S_ID]=table2.sID;
在 MS SQL 服务器中,您可以 select 表 1 的第一行并将其与表 2 在这样的视图中连接:
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
请尝试:
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
你可以这样做: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
我正在尝试创建一个 returns 值第一次出现的视图。
我有两个table
First table:
sID | dt
12 | DateTimeValue1
12 | DateTimeValue2
second table:
S_ID
12
我希望视图加入两个 table 并给我第一次出现 S_ID(在本例中为 DateTimeValue1)
我怎样才能做到这一点?
更多信息: 在 table 1 我有两列 sID 和 dt。这些列的值如下所示:
sID: 1 dt: 2014-06-12
sID: 1 dt: 2014-06-13
sID 1 dt: 2014-06-14 etc...
我想加入我认为的两个 table,这样 其中 S_ID 匹配 sID 它 returns 第一个值(在本例中为 2014-06-12)
抱歉造成任何混淆!
这是我目前得到的结果:
这是我目前得到的:
CREATE VIEW view_name AS
SELECT [S_ID]
FROM table1
LEFT JOIN table2
ON table1.[S_ID]=table2.sID;
在 MS SQL 服务器中,您可以 select 表 1 的第一行并将其与表 2 在这样的视图中连接:
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
请尝试:
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
你可以这样做: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