Sql 每个id表格所需的最新记录
我需要修改它,只返回每个不同测试id的最新日期行。 但是我不能使用MAX(),因为note和test是数据类型text您可以在内部查询中使用来解决问题。 但是,如果一个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 您可以在内部查询中使用来解决问
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的最大日期;不仅仅是总的最大日期。