我有一张这样的表
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 ....
答案 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)