+----+--------+----------+-----------+
| ID | Number | Reason | Timestamp |
+----+--------+-----------+----------+
| 1 | 2 | Business | date |
| 2 | 3 | Pleasure | date |
+----+--------+-----------+----------+
我有一张看起来像上面的桌子。我正在试图找出如何获得最新记录(按时间戳排名的表),其数字列加起来为某个值。
所以在上面的例子中,如果我的值为5,我会想要这两个记录(假设它们是最新的)。我想获得如下输出字符串:
2 (Business), 3 (Pleasure)
有什么想法吗?
答案 0 :(得分:3)
如果您要查找最多不超过X的记录,则需要累积总和。在SQL Server 2008中,使用相关子查询来处理:
select t.*
from (select t.*,
(select sum(number) from t t2 where t2.id <= t.id) as CumeSumValue
from t
) t
where CumeSumValue <= X
我认为>=
需要更多逻辑。
select t.*
from (select t.*,
(select sum(number)
from t t2
where t2.id <= t.id
) as CumeSumValue
from t
) t
where CumeSumValue <= X or -- less than or equal
((CumeSumValue - Number < X) and (CumeSumValue > X)) -- first that is greater than
CumeSumValue >= X
答案 1 :(得分:1)
答案 2 :(得分:1)
首先你应该得到最新的记录
Select Max(ID) MAXID Into #t From t Group By Timestamp
现在#t所有可用的最新记录。您可以使用表格访问所有字段:
Select t.* from t Join #t on t.ID = #t.MAXID
如果你想过滤一些东西,可以用简单的where子句来完成。