我想从SQL数据表中获取最新的记录。我有下面的数据表。但它返回0条记录。
Table1
PKID----FKID-----------CDateTime
1 25 2012-11-19 17:51:22.000
2 25 2012-11-19 17:53:22.000
3 25 2012-11-19 17:54:22.000
4 26 2012-11-19 17:55:22.000
5 26 2012-11-19 17:56:22.000
现在,我想要有FKID25的最新记录,它应该返回第三条记录(PKID =3) ...How得到它?我已经写了下面的代码,但它没有返回任何东西。
SELECT * from Table1 WHERE FKID = 25
and CDateTime= (select max(CDateTime) From Table1 )
发布于 2012-11-19 12:41:02
select top 1 * from tablename where FKID = 25 order by CDateTime desc
发布于 2012-11-19 12:41:37
您遇到的问题是您放置了一个永远不会为真的AND
约束,因此您得不到任何输出。此查询将完成此任务。
SELECT * from Table1 WHERE FKID = 25
and CDateTime= (select max(CDateTime) From Table1 where FKID = 25 )
发布于 2012-11-19 13:03:22
这个问题的另一个解决方案是在一个子查询上联接自己,该子查询获得每个FKID
的最新日期。
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT FKID, MAX(CDATETIME) maxDate
FROM tableName
GROUP BY FKID
) b ON a.FKID = b.FKID AND
a.CDateTime = MaxDate
或使用Common Table Expression
WITH latestRecords
AS
(
SELECT PKID, FKID, CDATETime,
ROW_NUMBER() OVER (PARTITION BY FKID
ORDER BY CDateTime DESC) rn
FROM TableNAme
)
SELECT PKID, FKID, CDATETime
FROM latestRecords
WHERE rn = 1
https://stackoverflow.com/questions/13454002
复制