T-Sql

查找具有多個日期列的最近更新的記錄

  • December 17, 2018

我最近繼承了一個從舊的 MS Access 數據庫轉換而來的 SQL Server 2016 數據庫。我有一個表格,其中顯示了相關序列號的各種維修日期和測試日期。我希望每個序列號有一行,顯示所有最近的日期。現在的表格根據輸入數據庫的不同日期顯示每個序列號的多行。

維修和配置日期表:

+------+-------------+-----------------+---------------+
| S/N  | REPAIR_DATE | INSPECTION_DATE | REPLACED_DATE |
+------+-------------+-----------------+---------------+
| 1001 | 2017-11-17  | 2017-11-17      | NULL          |
| 1002 | NULL        | NULL            | NULL          |
| 1002 | 2016-11-21  | 2016-11-21      | NULL          |
| 1004 | NULL        | NULL            | NULL          |
| 1004 | NULL        | 2017-03-28      | 2017-09-07    |
| 1004 | 2017-12-15  | NULL            | NULL          |
+------+-------------+-----------------+---------------+

期望的輸出

+------+-------------+-----------------+---------------+
| S/N  | REPAIR_DATE | INSPECTION_DATE | REPLACED_DATE |
+------+-------------+-----------------+---------------+
| 1001 | 2017-11-17  | 2017-11-17      | NULL          |
| 1002 | 2016-11-21  | 2016-11-21      | NULL          |
| 1004 | 2017-12-15  | 2017-03-28      | 2017-09-07    |
+------+-------------+-----------------+---------------+

如何合併表格結果,以便只有一行序列號顯示每列的最新日期?

在這種情況下,您可以使用GROUP BY獲取聚合 MAX(Date) :

引用自 MS Docs:

一個 SELECT 語句子句,將查詢結果分成多組行,通常用於對每個組執行一個或多個聚合。SELECT 語句每組返回一行。

SELECT
   SerialNumber,
   MAX(Repair_Date) as Repair_Date,
   MAX(Inspection_Date) as Inspection_Date,
   MAX(Replaced_Date) as Replaced_Date 
FROM
   YourTable
GROUP BY 
   SerialNumber

引用自:https://dba.stackexchange.com/questions/225198