Sql 每个id表格所需的最新记录

Sql 每个id表格所需的最新记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要修改它,只返回每个不同测试id的最新日期行。 但是我不能使用MAX(),因为note和test是数据类型text您可以在内部查询中使用来解决问题。 但是,如果一个id有多个具有相同时间戳的行,则只返回一行 SELECT results.time_stamp, results.result, results.note, tests.test FROM results INNER JOIN tests ON results.test_id = tests.id 您可以在内部查询中使用来解决问

我需要修改它,只返回每个不同测试id的最新日期行。 但是我不能使用MAX(),因为note和test是数据类型text

您可以在内部查询中使用来解决问题。 但是,如果一个id有多个具有相同时间戳的行,则只返回一行

SELECT results.time_stamp,
results.result, results.note, tests.test
FROM results INNER JOIN tests
ON results.test_id = tests.id
您可以在内部查询中使用来解决问题。 但是,如果一个id有多个具有相同时间戳的行,则只返回一行

SELECT results.time_stamp,
results.result, results.note, tests.test
FROM results INNER JOIN tests
ON results.test_id = tests.id

为什么不改用
子查询

select 
    time_stamp,result,note,test
from
(
SELECT 
    results.time_stamp,
    results.result, 
    results.note, 
    tests.test,
    rn=row__number() over( partition by results.test_id order by results.time_stamp desc)
FROM results 
    INNER JOIN tests
        ON results.test_id = tests.id

)
where rn=1
select r.*
from results r
where date = (select top 1 date
              from tests t 
              where t.id = r.test_id
              order by date desc
             );
如果要从两个表返回数据,则可以使用
连接
&使用
行数()
函数:

select 
    time_stamp,result,note,test
from
(
SELECT 
    results.time_stamp,
    results.result, 
    results.note, 
    tests.test,
    rn=row__number() over( partition by results.test_id order by results.time_stamp desc)
FROM results 
    INNER JOIN tests
        ON results.test_id = tests.id

)
where rn=1
select r.*
from results r
where date = (select top 1 date
              from tests t 
              where t.id = r.test_id
              order by date desc
             );

为什么不改用
子查询

select 
    time_stamp,result,note,test
from
(
SELECT 
    results.time_stamp,
    results.result, 
    results.note, 
    tests.test,
    rn=row__number() over( partition by results.test_id order by results.time_stamp desc)
FROM results 
    INNER JOIN tests
        ON results.test_id = tests.id

)
where rn=1
select r.*
from results r
where date = (select top 1 date
              from tests t 
              where t.id = r.test_id
              order by date desc
             );
如果要从两个表返回数据,则可以使用
连接
&使用
行数()
函数:

select 
    time_stamp,result,note,test
from
(
SELECT 
    results.time_stamp,
    results.result, 
    results.note, 
    tests.test,
    rn=row__number() over( partition by results.test_id order by results.time_stamp desc)
FROM results 
    INNER JOIN tests
        ON results.test_id = tests.id

)
where rn=1
select r.*
from results r
where date = (select top 1 date
              from tests t 
              where t.id = r.test_id
              order by date desc
             );

下面是一个交叉应用的答案:

select top 1 with ties r.*, t.test
from results r inner join 
     tests t
     on t.id = r.test_id
order by row_number() over (partition by r.test_id order by r.date desc);

下面是一个交叉应用的答案:

select top 1 with ties r.*, t.test
from results r inner join 
     tests t
     on t.id = r.test_id
order by row_number() over (partition by r.test_id order by r.date desc);

麦克斯无论如何在这里都不是合适的人选。无法保证具有MAX(注意)的行是具有最高timestamp MAX的行在这里无论如何都不适合使用。无法保证具有MAX(note)的行是具有最高timestnb的行:Op也希望从
tests
表中获得记录;并希望每个测试id的最大日期;不仅仅是总的最大日期。注意:Op也需要
测试
表中的记录;并希望每个测试id的最大日期;不仅仅是总的最大日期。