Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择列、日期列和按ID分组的最大值()_Sql_Group By_Sql Server 2012_Max - Fatal编程技术网

Sql 选择列、日期列和按ID分组的最大值()

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

我想从每个AssetId的表中选择最大设施级别状态,但也要获取相关日期

我可以获得每个assetID的最大级别,但由于我是按assetID分组的,因此无法确定如何带来关联的日期,但日期是唯一的

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