首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

SQL Server 按日期分組取多列最大值並輸出對應時間

     編輯:程式設計疑難解答

需求:按天分組,求 A、B、C 三列中的全局最大值,並輸出該最大值發生的具體時間(而非分組邊界)。

資料樣例

ID  Time                    A   B   C
1   2000-01-01 10:10:10    20  30  15
2   2000-01-01 11:20:20    30  15  40
3   2000-01-01 12:30:30    30  20  10
4   2000-01-02 10:10:10    30  40  25
5   2000-01-02 11:20:20    20  50  60

目標輸出

Time                    Max
2000-01-01 11:20:20    40
2000-01-02 11:20:20    60

解法:ROW_NUMBER 窗口函數

WITH Ranked AS (
    SELECT
        Time,
        GREATEST(A, B, C) AS Val,
        ROW_NUMBER() OVER (PARTITION BY CAST(Time AS DATE) ORDER BY GREATEST(A, B, C) DESC) AS rn
    FROM T
)
SELECT Time, Val AS MaxVal
FROM Ranked
WHERE rn = 1;

SQL Server 2022+ 支持 GREATEST;舊版本用 CASE WHEN A>B AND A>C THEN A ... END。

關鍵點

  • 先算行級三列最大值,再按天分區排序取 Top 1
  • 保留原始 Time 列,滿足「輸出對應時間」要求
  • 索引建議:CREATE INDEX ix_date_abc ON T(CAST(Time AS DATE), A, B, C)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved