微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 只需要从INNER JOIN返回一行

我想仅从内连接返回第一行.我有两张桌子:
TABLE_X |  TABLE_Y
id      |  id   creationdate  xid 
1       |  1    01/01/2011    1
2       |  2    01/01/2011    1
3       |  3    31/12/2010    2
4       |  4    28/12/2010    3

表Y中的行可以具有相同的创建日期,因此我首先获得MAX(creationdate),然后从该集合获得MAX(id),例如:

SELECT  a.id,c.id,d.id,e.id,d.CREATIONDATE,a.REFNUMBER,a.DATECREATED,a.DESCRIPTION,e.CATEGORYCODE,e.OUTSTANDINGAM_MONAMT,e.PREVPAIdamOUN_MONAMT,e.TOTALINCURRED_MONAMT,e.LOSSFROMDATE,FROM 
TABLE_A a
INNER JOIN TABLE_B b ON (b.id = a.id)
INNER JOIN TABLE_C c ON (c.id = b.id)
INNER JOIN TABLE_D d ON
(
   c.i =
   (
      select
      d.id
      FROM TABLE_D
      WHERE TABLE_D.id = c.id
      AND TABLE_D.id =
      (
         select
         max(id)
         from TABLE_D t1
         where c_id = c.id
         and CREATIONDATE =
         (
            select
            max(CREATIONDATE)
            from TABLE_D t2
            where t2.c_id = t1.c_id
         )
      )
   ) 
)

INNER JOIN TABLE_E e ON
(
   d.i =
   (
      select
      e.d_id
      from TABLE_E
      where d_id = d.id
      AND id =
      (
         select
         max(id)
         from e t1
         where e.d_id = d.id
         and CREATIONDATE =
         (
            select
            max(CREATIONDATE)
            from TABLE_E t2
            where t2.d_id = t1.d_id
         )
      )
   )
)

当我自己调用它时,这可以工作,但是当我将它添加到INNER JOIN时,我为表Y中的每个匹配行获取一行.

我想要的是creationdate和id的最新记录,其中来自TABLE_X的xid = id.

解决方法

试试这个查询
select *,(
select top 1 creationdate from Table_Y 
where from Table_Y.xId = m.id
order by Table_Y.CreationDate 
) 
from Table_X m

查询将选择具有max creationdate的前1个结果,主查询将选择所有记录,以便获得所需的结果

原文地址:https://www.jb51.cc/mssql/76759.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐