Sql 获取值最大的行
我在SQL Server中有此查询:Sql 获取值最大的行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在SQL Server中有此查询: SELECT DISTINCT D214.DESTIMATED, D214.LINSEQNO, H214.SHPID FROM IN_214_HDR H214 JOIN IN_214_DTL D214 ON H214.TRANNO = D214.TRANNO WHERE H214.SHPID = 'NGB8264646' 它将返回此结果集 DESTIMATED LINSEQNO SHPID 2014-08-24
SELECT DISTINCT
D214.DESTIMATED,
D214.LINSEQNO,
H214.SHPID
FROM IN_214_HDR H214
JOIN IN_214_DTL D214 ON H214.TRANNO = D214.TRANNO
WHERE H214.SHPID = 'NGB8264646'
它将返回此结果集
DESTIMATED LINSEQNO SHPID
2014-08-24 00:00:00.000 1 NGB8264646
2014-09-09 00:00:00.000 2 NGB8264646
2014-09-09 00:00:00.000 3 NGB8264646
2014-09-23 00:00:00.000 4 NGB8264646
使用不同的H214.SHPID,我将得到不同数量的返回行,它们都将有一个LINSEQNO=1
DESTIMATED LINSEQNO SHPID
2014-08-24 00:00:00.000 1 NGB8262321
2014-09-12 00:00:00.000 2 NGB8262321
2014-09-18 00:00:00.000 3 NGB8262321
2014-10-23 00:00:00.000 4 NGB8262321
2014-10-29 00:00:00.000 5 NGB8262321
2014-11-09 00:00:00.000 6 NGB8262321
我需要的是一个返回相同列的查询,但我只需要LINSEQ最大的行。因此,每一项都需要这样的结果集
DESTIMATED LINSEQNO SHPID
2014-09-23 00:00:00.000 4 NGB8264646
及
LINSEQNO的最小值为1,但最大值可以是任何大于1的值。使用窗口函数:
SELECT TOP 1 D214.DESTIMATED,
D214.LINSEQNO,
H214.SHPID
FROM IN_214_HDR H214
JOIN IN_214_DTL D214 ON H214.TRANNO = D214.TRANNO
WHERE H214.SHPID = 'NGB8264646'
ORDER BY LINSEQNO DESC
select DESTIMATED, LINSEQNO, SHPID
from (select D214.DESTIMATED, D214.LINSEQNO, H214.SHPID,
row_number() over (partition by H214.SHPID order by D214.LINSEQNO desc) as seqnum
from IN_214_HDR H214 joi
IN_214_DTL D214
on H214.TRANNO = D214.TRANNO
) t
where seqnum = 1;
那很容易。好的简单解决方案。
select DESTIMATED, LINSEQNO, SHPID
from (select D214.DESTIMATED, D214.LINSEQNO, H214.SHPID,
row_number() over (partition by H214.SHPID order by D214.LINSEQNO desc) as seqnum
from IN_214_HDR H214 joi
IN_214_DTL D214
on H214.TRANNO = D214.TRANNO
) t
where seqnum = 1;