我有两个表:内部查询难写
customer
与schema_id
架构表有:schema_id, period, amt, updated_date
我需要加入的客户和架构,但只检索最新记录加盟而不是其他人。
customer table
cust_id name schema_id
1 ABC 1
架构表
schema_id period amt updated_date
1 1 100 2010-4-1
1 2 150 2011-4-1
我有两个表:内部查询难写
customer
与schema_id
架构表有:schema_id, period, amt, updated_date
我需要加入的客户和架构,但只检索最新记录加盟而不是其他人。
customer table
cust_id name schema_id
1 ABC 1
架构表
schema_id period amt updated_date
1 1 100 2010-4-1
1 2 150 2011-4-1
如果您需要max(updated_date)
每个schema_id
,那么你可以使用一个子查询:
select c.cust_id, c.name, c.schema_id, s.period, s.amt, s.updated_date
from customer c
inner join
(
select s1.schema_id, s1.period, s1.amt, s1.updated_date
from `schemas` s1
inner join
(
select schema_id, max(updated_date) MaxDate
from `schemas`
group by schema_id
) s2
on s1.schema_id = s2.schema_id
and s1.updated_date = s2.maxdate
) s
on c.schema_id = s.schema_id
然后,子查询使用在连接回你的表中返回行具有匹配的日期和schema_id。
t1没有更新日期 – 2013-03-22 19:40:25
@AbhijitShelar你是什么意思't1'没有'updated_date'? 'updated_date'在你的表中。这是通过自连接来获取每个'schema_id'和'max(updated_date)'的行。 – Taryn 2013-03-22 19:43:56
第一个表只有schema_id作为其中一列 – 2013-03-22 19:44:41
如果我理解你的问题,你需要采取最新的“架构”注册。
我认为你需要使用max()函数。因此,请尝试下面的查询:
select *
from customer c,
schema s
where c.schema_id = s.schema_id
and s.updated_date = (select max(s2.updated_date)
from schema s2
where s2.schema_id = s.schema_id
)
问候!
埃德米尔顿
请始终显式指定您的连接,请勿使用隐式连接语法(逗号分隔的'FROM'子句)。除此之外,它使得关于某些连接条件的推理非常困难。 – 2013-03-22 19:55:52
@ Clockwork-Muse哦,是的,绝对。我可能写了一些关于此:http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx – 2013-03-22 19:59:18
感谢您的提示Clockwork-Muse和@ aaron-bertrand。但我认为这是主观的!顺便说一句,我会读到的,包括亚伦的帖子! – Edmilton 2013-03-22 20:24:05
请通过添加适当的标记(Oracle,SQL Server,MySQL等)来指定您要定位的RDBMS。可能会有利用不被普遍支持的语言或产品功能的答案。此外,通过为特定的RDBMS添加标签,您的问题可能会得到更适合回答的人的关注。 – Taryn 2013-03-22 19:35:44
我正在使用mysql – 2013-03-22 19:37:24