【问题标题】:SELECT MAX() of Column, DATE Column and group by IDSELECT MAX() of Column, DATE Column and group by ID
【发布时间】:2020-01-19 18:57:47
【问题描述】:

我想从每个 AssetId 的表中选择 MAX() Facility Level Status,但还要获取关联的日期。

我可以获得每个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

【问题讨论】:

    标签: sql group-by sql-server-2012 max


    【解决方案1】:

    您可以使用相关子查询:

    select t.*
    from #temp t
    where t.FacilityStatusLevel = (select max(t2.FacilityStatusLevel) from #temp t2 where t2.assetid = t.assetid);
    

    【讨论】:

    • 嗨,我不是在寻找最大日期。
    • @ConradAddo 。 . .这是对查询的简单调整。我修好了。
    【解决方案2】:

    您可以使用MAX ([ ALL ] expression) OVER ( [ <partition_by_clause> ] [ <order_by_clause> ] ) 编写查询:

    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
    

    Sample code here...

    【讨论】:

      【解决方案3】:

      不存在:

      SELECT t.* FROM #temp t
      WHERE NOT EXISTS (
        SELECT 1 FROM #temp
        WHERE AssetID = t.AssetID AND FacilityStatusLevel > t.FacilityStatusLevel
      )
      

      请参阅demo
      结果:

      AssetId | FacilityStatusLevel | DateProcessed      
      ------: | ------------------: | :------------
            1 |                   2 | 02/01/2019
            2 |                   4 | 04/01/2019
            3 |                   5 | 05/01/2019
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        • 2017-05-29
        • 1970-01-01
        • 2014-12-25
        • 1970-01-01
        • 2021-08-04
        相关资源
        最近更新 更多