1

我有这个结构

table idc (numId,idInt, IdAffiliate)
table glob (idInt, IdAtt)
table gratt(IdAtt, dtRomp)
Table update(IdAffiliate, dateUpdate)

做出这个选择声明会给我这个:

SELECT
    NumId, 
    dateUpdate, 
    DtRomp,
    Idc.IdFiliale 
FROM Idc inner join glob on glob .IdInt = Idc.IdInt  
         inner join Grat on Glob.IdAtt = Grat.IdAtt   
         inner join update on update.IdAffiliate = Idc.IdAffiliate
where NumId = 9976666

会给我这个:

NumId   DtUpdate              DtRomp            filiale
9976666 01/05/2005            11/07/2006        27
9976666 01/05/2005            03/07/2008        27
9976666 01/05/2005            24/06/2010        27
9976666 01/05/2006            11/07/2006        27
9976666 01/05/2006              03/07/2008      27
9976666 01/05/2006            24/06/2010        27

我正在尝试这样做:选择最接近 DtRomp 的 dtUpdqte 并且不如它

最亲切的问候

我一直在尝试,但还没有解决方案。

4

3 回答 3

0

你可以这样做row_number()

select NumId, dateUpdate, DtRomp, Idc.IdFiliale
from (SELECT NumId, dateUpdate, DtRomp, Idc.IdFiliale,
             row_number() over (partition by NumID, DTRomp order by DTRomp desc) as seqnum
      FROM Idc inner join glob on glob .IdInt = Idc.IdInt  
               inner join Grat on Glob.IdAtt = Grat.IdAtt   
               inner join update on update.IdAffiliate = Idc.IdAffiliate
      where NumId = 9976666 and dateUpdate < DTRomp
     ) t
where seqnum = 1;
于 2013-07-15T10:40:13.057 回答
0

尝试使用datediff如下功能:

SELECT
    NumId, 
    dateUpdate, 
    DtRomp,
    Idc.IdFiliale 
FROM Idc inner join glob on glob .IdInt = Idc.IdInt  
         inner join Grat on Glob.IdAtt = Grat.IdAtt   
         inner join update on update.IdAffiliate = Idc.IdAffiliate
where NumId = 9976666
and datediff(day,dateUpdate,DtRomp) = (
                                         SELECT
                                         min(datediff(day,dateUpdate,DtRomp))
                                         FROM Idc inner join glob on glob .IdInt = Idc.IdInt  
                                         inner join Grat on Glob.IdAtt = Grat.IdAtt   
                                         inner join update on update.IdAffiliate = Idc.IdAffiliate
                                         where NumId = 9976666

                                      )

有关 datediff() 的更多信息

于 2013-07-16T07:36:01.487 回答
0

它适用于这个!!!!

SELECT
NumId, 
dateUpdate, 
DtRomp,
Idc.IdFiliale 
FROM Idc inner join glob on glob .IdInt = Idc.IdInt  
         inner join Grat on Glob.IdAtt = Grat.IdAtt   
         inner join update on update.IdAffiliate = Idc.IdAffiliate
where NumId = 9976666
and datediff(day,dateUpdate,DtRomp) = (
                                         SELECT
                                         min(datediff(day,dateUpdate,DtRomp))
                                         FROM Idc ainner join glob b on a.IdInt = c.IdInt  
                                         inner join Grat con b.IdAtt = c.IdAtt   
                                         inner join update d on d.IdAffiliate = Idc.IdAffiliate
                                         where NumId = 9976666 and Idc.IdAffiliate = a.IdAffiliate and Grat.DtRompu = c.DtRompu and Grat.DtRompu>DtDebValidite

                                      )

问候

于 2013-07-16T12:30:10.867 回答