如何获取具有相同ID的最新记录?

4

我希望从 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

现在,我想要具有FKID 25的最新记录。它应该返回第三条记录(PKID = 3)...如何获得?我已经编写了下面的代码,但没有返回任何内容。

SELECT * from Table1 WHERE FKID = 25
 and CDateTime= (select max(CDateTime) From Table1 )
5个回答

3
select top 1 * from tablename where FKID = 25 order by CDateTime desc

什么是 top 1 的意思? - morha13

3
你的问题在于你添加了一个永远不会成立的AND约束条件,因此你没有得到任何输出。这个查询语句可以解决问题。
 SELECT * from Table1 WHERE FKID = 25
     and CDateTime= (select max(CDateTime) From Table1 where FKID = 25 )

2
另一种解决此问题的方法是在一个子查询中将自身连接,该子查询获取每个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

或者使用公共表达式

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

1

你的查询没有返回值,因为子查询(从Table1中选择最大的CDateTime)将给出整个表中的最大CDateTime,而不是FKID = 25的。

尝试这个:

with cte as(
SELECT *,row_number() over (partition by FKID order by CDateTime desc) as rn 
from Table1 )
select * from cte 
WHERE FKID = 25
and rn=1

0

试试这个:

SELECT * from Table1 WHERE FKID = 25
and CDateTime= (select max(CDateTime) From Table1 where FKID = 25)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接