有没有任何方法从数据库中获取最后一个值的列表?我有一个名为SessionList的表,列为StudId (SID)、Therapist ID (TID)、Date
我总共有5个孩子患有SID 1,2,3,4,5和10名治疗师,有TID 1,2,3.
现在所有的孩子都被分配到一个特定的治疗师那里。
因此,孩子1被分配给治疗师10,2被分配给治疗师5等等,当他们开始教他们的时候有一个约会。我可以在某一天为一个孩子换一个治疗师,例如,治疗师在一月和二月和第一个孩子在一起,现在他被重新分配给治疗师7,从3月开始。所以我有一份所有这些记录的清单。因此,一个孩子可以在桌子上有多个记录,而那个孩子的最后一张记录就是目前那个孩子的治疗师。
如何从桌子上提取所有孩子的最后记录的列表。如果我在DB中总共有12条记录,那么我的查询应该只获取5条记录,这些记录代表了数据库中那个孩子的最后一个条目。
我厌倦了用最后一个关键字。使用同一表上的联接。没起作用。
有任何方法可以创建视图并使用内/左连接来解决这个问题吗?
发布于 2014-10-08 16:56:02
一种方法是在Server 2005和更新版本中使用CTE (公共表表达式)(在这方面还不够具体)。
使用此CTE,您可以根据某些条件(即CustomerId )对数据进行分区,并让Server为每个“分区”从1开始对所有行进行编号,并按某些条件进行排序。
所以试着做这样的事情:
CREATE VIEW vw_CurrentTherapists
AS
WITH CurrentTherapist AS
(
SELECT
SID, TID, [Date],
RowNum = ROW_NUMBER() OVER(PARTITION BY SID ORDER BY Date DESC)
FROM
dbo.SessionList
)
SELECT
SID, TID, [Date]
FROM
CurrentTherapist
WHERE
RowNum = 1在这里,我只为每个“分区”(即每个SID -每个孩子)选择“第一个”条目-按日期排序。
这接近你要找的东西吗??
PS:使用像Date这样的列名是非常糟糕的--首先,这并不能告诉我到底是哪种日期--而且,从Server 2008开始,DATE是一个保留关键字(用于数据类型)。尝试使您的列名更具表现力,更有意义,并避免所有Server保留关键字!(见SQL Server中保留关键字的正式MSDN文档)
我建议使用类似SessionDate (如果这意味着会话发生的日期),或者ValidFrom (如果它代表孩子/治疗师匹配的有效日期/就位日期)。
https://stackoverflow.com/questions/26261363
复制相似问题