如何从最新插入的记录中获取最后一条记录

时间:2012-10-26 09:26:20

标签: sql-server-2008

我有一张这样的表

Col1   Col2  Mindate                        MaxDate 
A       B    12-04-2012 00:12:00:087        31-04-2012 00:00:01:001
C       D    01-01-2011                     30-01-2011 
A       B    09-05-2012                     27-05-2012
A       B    11-07-2012                     21-07-2012

我只在第一行插入了日期时间,但为了简洁起见,在其他行中省略了,所有日期列都是日期时间。

假设我已插入A和B的最后记录(Col1和Col2是组合键)。 现在我想要A amd B的最后一个记录,基于上面的情况应该是

的思想
A       B    09-05-2012                     27-05-2012

我正在尝试以下查询:

SELECT * FROM tbl WHERE Col1 ='A' AND Col2='B' AND ....

4 个答案:

答案 0 :(得分:1)

您可以按降序排列Mindate对表格进行排序,并获得与排名2相对应的记录。

SELECT t1.*
FROM
    table t1
    JOIN (SELECT Col1, Col2, RANK() OVER (ORDER BY Mindate DESC) 'Rank' 
          FROM table
          WHERE Col1 = 'A' AND col2 = 'B'
    ) as t2
ON t1.Col1 = t2.Col1 AND t1.col2 = t2.col2 AND t1.rank = 2

答案 1 :(得分:1)

性能不是很好,但应该完成这项工作

SELECT * FROM tbl 
WHERE Col1 ='A' AND Col2='B'
AND mindate = (select max(mindate) from tbl where Col1 = 'A' AND Col2='B')

答案 2 :(得分:1)

您可以使用ROW_NUMBER

WITH CTE AS
(
   SELECT Col1, Col2, Mindate, MaxDate
    , RN = ROW_NUMBER() OVER (PARTITION BY Col1, Col2 ORDER BY Mindate DESC)
   FROM dbo.Tbl
   WHERE COL1='A' AND COL2='B'
)
SELECT Col1, Col2, Mindate, MaxDate
FROM CTE 
WHERE RN = 2

根据Mindate和给定的密钥,这将返回第二个记录。

答案 3 :(得分:-3)

SELECT * FROM tbl WHERE Col1 ='A' AND Col2='B' AND Mindate = MAX(Mindate)