Tsql 如何仅从表中选择最新的条目

Tsql 如何仅从表中选择最新的条目,tsql,Tsql,我在MS SQL Server 2008数据库中有一个包含如下作业的表: J_ID J_Name J_ReadDate J_I_ID ````````````````````````````````````````````````````````` 01 Job1 2011-06-26 01:00:12.153 1 02 Job2 2011-06-25 01:00:07.10

我在MS SQL Server 2008数据库中有一个包含如下作业的表:

J_ID      J_Name       J_ReadDate                  J_I_ID
`````````````````````````````````````````````````````````
01        Job1        2011-06-26 01:00:12.153      1
02        Job2        2011-06-25 01:00:07.103      1
03        Job3        2011-06-25 01:00:07.103      2
04        Job4        2011-06-25 01:00:07.103      3
05        Job1        2011-06-26 01:00:07.103      1
06        Job2        2011-06-26 01:00:08.103      2
07        Job1        2011-06-26 01:00:08.103      2
现在我只想选择最新的作业,不管条目有多旧。因此,在我的示例中,它希望得到以下结果(由J_ReadDate DESC排序):


我怎样才能做到这一点?我不能说,条目之间的时差总是一天。

下面的内容将得到您想要的

SELECT J_ID, J_Name, J_ReadDate, J_I_ID
FROM (
  SELECT J_ID, J_Name, J_ReadDate, J_I_ID,
         ROW_NUMBER() OVER (PARTITION BY J_Name ORDER BY J_ReadDate DESC) AS RN
  FROM jobs
) J
WHERE J.RN = 1
ORDER BY J_ReadDate DESC

下面的内容将得到你想要的

SELECT J_ID, J_Name, J_ReadDate, J_I_ID
FROM (
  SELECT J_ID, J_Name, J_ReadDate, J_I_ID,
         ROW_NUMBER() OVER (PARTITION BY J_Name ORDER BY J_ReadDate DESC) AS RN
  FROM jobs
) J
WHERE J.RN = 1
ORDER BY J_ReadDate DESC

谢谢,但是我忘了提一件事。。。J_名称不是唯一的,因此仅决定此列是不够的。在我的情况下,J_Name和J_I_ID的组合是唯一的(与时间一起),我可以简单地将J_I_ID添加到分割子句中吗?@Fender:你可能已经自己决定了,但为了以后阅读这篇文章的人:是的,你可以。谢谢,但我忘了提到一些东西。。。J_名称不是唯一的,因此仅决定此列是不够的。在我的例子中,J_Name和J_I_ID的组合是唯一的(与时间一起),我可以简单地将J_I_ID添加到分割子句中吗?@Fender:您可能已经自己决定了,但为了以后阅读本文的读者:是的,您可以。