4

SQLデータテーブルから最新のレコードを取得したい。以下のデータ表があります。しかし、その戻り値は0レコードです。

表1

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の最新のレコードが欲しいのですが、3番目のレコード(PKID = 3)を返すことになっています...それを取得するにはどうすればよいですか?私は以下のコードを書きましたが、何も返しません。

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

5 に答える 5

3
select top 1 * from tablename where FKID = 25 order by CDateTime desc
于 2012-11-19T12:41:01.857 に答える
3

あなたが抱えている問題は、AND決して真にならない制約を設定していることです。したがって、出力が得られません。このクエリでうまくいきます。

 SELECT * from Table1 WHERE FKID = 25
     and CDateTime= (select max(CDateTime) From Table1 where FKID = 25 )
于 2012-11-19T12:41:36.867 に答える
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

またはを使用して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
于 2012-11-19T13:03:21.887 に答える
1

サブクエリ ( select max(CDateTime) From Table1 ) が FKID = 25 ではなくテーブル全体から最大 CDateTime を与えるため、クエリは値を返しません

これを試して:

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
于 2012-11-19T12:42:23.337 に答える
0

これを試して:

SELECT * from Table1 WHERE FKID = 25
and CDateTime= (select max(CDateTime) From Table1 where FKID = 25)
于 2012-11-19T12:41:16.110 に答える