2014-03-13 38 views
0

我有一个表记录了基于辅助代码和代码的集合中的操作,下面的例子基本上是按序号分开的两个操作。我的问题是,你如何获得只有使用SQL的最新序列集?只选择SQL中的最新序列

到目前为止,我可以使用下面的查询获得最新的序列号,但我觉得这不是最好的方法。

Select max(SequenceNo) as LatestSequence from tblLogs Where 
1 = (Case when charindex(SecondaryID, @SecondaryID) > 0 then 1 else 0 end) 

下面是示例表:

+----+---------------+------------+------------+ 
| id | SecondaryID | SequenceNo | Code | 
+----+---------------+------------+------------+ 
| 23 | ZRHK113100017 |   1 | 0000000001 | 
| 24 | ZRHK113100017 |   1 | 0000009460 | 
| 25 | ZSHK113100021 |   1 | 0000000001 | 
| 26 | ZSHK113100021 |   1 | 0000009460 | 
| 27 | ZRHK113100017 |   2 | 0000000001 | 
| 28 | ZRHK113100017 |   2 | 0000009460 | 
| 29 | ZSHK113100021 |   2 | 0000000001 | 
| 30 | ZSHK113100021 |   2 | 0000009460 | 
+----+---------------+------------+------------+ 

查询应返回以下

+----+---------------+------------+------------+ 
| id | SecondaryID | SequenceNo | Code | 
+----+---------------+------------+------------+ 
| 27 | ZRHK113100017 |   2 | 0000000001 | 
| 28 | ZRHK113100017 |   2 | 0000009460 | 
| 29 | ZSHK113100021 |   2 | 0000000001 | 
| 30 | ZSHK113100021 |   2 | 0000009460 | 
+----+---------------+------------+------------+ 

回答

1

ORDER BY ... DESC试试这个

SELECT * 
FROM dbo.Table_1 
WHERE SequenceNo = (SELECT MAX(SequenceNo) FROM dbo.Table_1) 
1

使用TOP (1) WITH TIES在一起:

SELECT TOP (1) WITH TIES * 
FROM dbo.YourTable 
ORDER BY SequenceNo DESC 
; 

TOP (1)将让你根据指定顺序排列在最上面一行,WITH TIES将指示服务器还返回所有具有相同SequenceNo值作为最上面一行行。