首页 > 解决方案 > 在行列表中查找最大值并返回整行 SQL Server

问题描述

嗨,我想弄清楚如何从列中具有最高值的表中返回一行。在我可以这样做之前,我必须获取该列的子字符串并将其转换为 INT。

主表名称为“CalendarPeriod”

这是列的示例

财政期 - 0120

我必须从左边取两个字符,这将是我试图找到的 MAX 值的数字

下面是列名称的行列表。FiscalPeriod 是我需要 Substring 并转换为 Int 以找到最大值的列。

在此处输入图像描述

此查询的结果应返回 FiscalPeriod 为“1220”且 Id 为“1134”的行,但它返回的是第一个。

这是我找到的查询,但我无法弄清楚如何将其转换回 NVARCHAR。我认为,如果我在内部联接中添加常规会计期间,我将能够在 Where 子句中使用它来获得最大值,但我错了。

我也在内部加入另一个表“CalendarPeriodHeader”,其中包含我还需要在哪里进行比较的年份。这也可能会弄乱查询结果,但我很难过下面是我到目前为止的查询。

Select Top 1 cp.*
From CalendarPeriod as cp
INNER JOIN
(
    Select  Top 1 Id, Max(Cast(Substring(FiscalPeriod, 1,2) as Int)) as MAXFiscal, FiscalPeriod
    From CalendarPeriod 
    Group By Id, FiscalPeriod
    
)cp2
On cp2.Id = cp.Id
Inner Join CalendarPeriodHeader as header on header.Id = cp.HeaderId
Where cp2.FiscalPeriod = cp.FiscalPeriod And header.Year = 2020

标签: sqlsql-server

解决方案


我会使用这个查询:SELECT TOP 1 * FROM dbo.CalendarPeriod ORDER BY Cast(Substring(FiscalPeriod, 1,2) as Int) DESC


推荐阅读