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

时间:2018-06-01 09:39:23

标签: sql sql-server tsql

sql_context.sql("CREATE function newF as 'f' USING JAR 'udf.jar'")

我需要修改它以仅返回每个不同test_id的最新日期行。 但我不能使用MAX(),因为注释和测试是数据类型文本

3 个答案:

答案 0 :(得分:1)

您可以在内部查询中使用 row_number 来解决您的问题。 但是,如果有多个行具有相同的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

答案 1 :(得分:1)

为什么不使用subquery代替:

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

如果您想从两个表中返回数据,那么您可以执行JOIN&改为使用row_number()函数:

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);

答案 2 :(得分:1)

这是一个交叉应用答案:

SELECT 
    results.time_stamp,
    results.result, 
    results.note, 
    tests.test
FROM results
CROSS APPLY
(
    select top 1 *
    from tests t 
    where t.id = results.test_id
    order by date desc
) tests