返回最新数据

时间:2014-06-05 21:53:57

标签: sql sql-server

我有一个数据库表,其结构如下:

CREATE table match (ID1 int, ID2 int, CreatedDate, ConnectDisconnect)

我正在尝试编写一个SQL语句,它将返回按id1和id2分组的最新重新匹配记录。例如,请参阅以下数据:

1,2,'2014-06-05', C
1,3,'2014-06-05', C
1,4,'2014-06-05', C
N1,N2,'2014-06-05',D

请参阅下面的SQL语句:

select max(CreatedDate), ID1,ID2 FROM match
group by ID1,ID2

这将显示对ID1和ID2做出的最新决定。问题是匹配的记录可以是两种方式。例如:

1,2,'2014-06-04', C
2,1,'2014-06-05', D

上述数据显示记录1和2已于2014年4月6日连接,并于2014年6月6日断开连接。我上面的查询将返回两行,但是我只希望它返回一行,即最近一行(上述案例中的数据日期为05/06/14)。

2 个答案:

答案 0 :(得分:1)

以下是一种方法,使用caserow_number()

select m.*
from (select m.*,
             row_number() over (partition by (case when id1 < id2 then id1 else id2 end),
                                             (case when id1 < id2 then id2 else id1 end)
                                order by CreatedDate desc
                               ) as seqnum
      from match m
     ) m
where seqnum = 1;

答案 1 :(得分:0)

它很难看,但这可能会做你想要的(不确定连接语法在SQL Server中是什么):

select max(CreatedDate), case when ID1 < ID2 concat(ID1,',',ID2) else concat(ID2,',',ID1) end as combinedIds
FROM match
group by case when ID1 < ID2 concat(ID1,',',ID2) else concat(ID2,',',ID1) end