我有一个包含数百万行的表,每个行都有一个时间戳。我需要一个语句来检查代码和日期条目,并找到两者的最新时间戳。我尝试了以下查询但是我收到错误“列中没有找到列rownumber。”
select
code, date, other_crit1, other_crit2, timestamp
from (select ROW_NUMBER() over (partition by code order by date desc, timestamp desc)
code, date, other_crit1, other_crit2, timestamp
from MyTable) t
where RowNumber = 1
我觉得我很亲密,但并不完全在那里。任何帮助将不胜感激。
答案 0 :(得分:1)
您需要为该列命名。我使用seqnum
:
select code, date, other_crit1, other_crit2, timestamp
from (select row_number() over (partition by code order by date desc, timestamp desc) as seqnum,
code, date, other_crit1, other_crit2, timestamp
from MyTable
) t
where seqnum = 1;
如果您愿意,可以将其称为RowNumber
。我对这个名称并不感到兴奋,因为除非有明确的order by
子句,否则SQL结果集是无序的。