当查询超出范围时,返回范围中的最后一条记录

时间:2012-12-15 00:25:17

标签: sql sql-server

给出一个表

{ID, Code, OffSet, Amount},
{1, 1, 1, .30}
{2, 1, 2, .45}
{3, 1, 3, .50}
{4, 2, 1, .26}

如果我知道确切的偏移量,我可以轻松查询。但是如果表中没有包含偏移怎么办?如何通过连接获取查询以返回给定代码的最后一个有效记录?

例如,如果我的查询包含code = 1且offset = 4,则应该从ID为3的记录返回.50的金额

SELECT T1.Account, T2.Amount
  FROM Table1 T1
  LEFT JOIN Table2 T2 on T2.Code = T1.Code and T2.Offset = 4  --?? What goes here??
 WHERE T1.Account = 'ABCD'

我正在使用MSSQL 2008 R2。

感谢。

2 个答案:

答案 0 :(得分:0)

  

如何获取查询以返回给定代码的最后一个有效记录?

SELECT TOP 1 * FROM MyTbl WHERE Code = 1 AND OffSet <= 4 ORDER BY OffSet DESC

假设ID字段是自动递增的。

答案 1 :(得分:0)

此处您的ID是唯一的,并假设插入新记录时,它不仅仅是现有ID ..

所以,您可以使用前1个记录轻松获取该记录,并按ID desc排序 我正在使用您的查询来解决该问题

SELECT T1.Account, T2.Amount
  FROM Table1 T1
  LEFT JOIN Table2 T2 on T2.Code = T1.Code and T2.Offset = 4  
 WHERE T1.Account = 'ABCD' order by T1.Id desc Limit 1

注意:top用于sql server,limit用于mysql