Sql 选择列、日期列和按ID分组的最大值()
我想从每个AssetId的表中选择最大设施级别状态,但也要获取相关日期 我可以获得每个assetID的最大级别,但由于我是按assetID分组的,因此无法确定如何带来关联的日期,但日期是唯一的Sql 选择列、日期列和按ID分组的最大值(),sql,group-by,sql-server-2012,max,Sql,Group By,Sql Server 2012,Max,我想从每个AssetId的表中选择最大设施级别状态,但也要获取相关日期 我可以获得每个assetID的最大级别,但由于我是按assetID分组的,因此无法确定如何带来关联的日期,但日期是唯一的 DROP TABLE #temp CREATE TABLE #temp (AssetId int, FacilityStatusLevel int, DateProcessed date) INSERT INTO #temp(AssetId, FacilityStatusLevel, DatePro
DROP TABLE #temp
CREATE TABLE #temp
(AssetId int, FacilityStatusLevel int, DateProcessed date)
INSERT INTO #temp(AssetId, FacilityStatusLevel, DateProcessed)
VALUES
(1, 1,'2019-01-01'),
(1, 2,'2019-01-02'),
(2, 3,'2019-01-03'),
(2, 4,'2019-01-04'),
(3, 5,'2019-01-05')
SELECT AssetID, MAX(#temp.FacilityStatusLevel) as MaxFacilityStatusLevel
FROM #temp
GROUP BY AssetID
我预计结果如下:
AssetID | MaxFacilityStatusLevel | DateProcessed
1 2 2019-01-02
2 4 2019-01-04
3 5 2019-01-05
您可以使用相关子查询:
select t.*
from #temp t
where t.FacilityStatusLevel = (select max(t2.FacilityStatusLevel) from #temp t2 where t2.assetid = t.assetid);
不存在以下情况:
SELECT t.* FROM #temp t
WHERE NOT EXISTS (
SELECT 1 FROM #temp
WHERE AssetID = t.AssetID AND FacilityStatusLevel > t.FacilityStatusLevel
)
看。
结果:
您可以在[]上使用MAX[ALL]表达式编写查询,如下所示:
嗨,我不是在找最长的日期。@ConradAddo。这是对查询的简单调整。我修好了。
AssetId | FacilityStatusLevel | DateProcessed
------: | ------------------: | :------------
1 | 2 | 02/01/2019
2 | 4 | 04/01/2019
3 | 5 | 05/01/2019
Select
AssetId,
MaxFacilityStatusLevel,
DateProcessed
from
(
select AssetId ,
max(FacilityStatusLevel) over (partition by AssetId ) as
MaxFacilityStatusLevel,
row_number() over (partition by AssetId order by FacilityStatusLevel desc ) as
rownum,
DateProcessed
from #temp
) T
where T.rownum = 1