簡體   English   中英

如何查找包含NULL並認為最大值的列的最大值

[英]How to find max value of column with NULL being included and considered the max

我有一張帶有一列日期的表,其中包括日期和NULL值。 我試圖找出一種方法來找到每個ID的MAX Date ,或者如果有NULL值,則返回NULL

因此,例如:

ID    Date
1     2014-01-01
1     2014-02-01
1     2014-03-01
2     2014-02-01
2     NULL
3     NULL
4     2014-03-01

所以我想產生的是:

1 = 2014-03-01
2 = NULL
3 = NULL
4 = 2014-03-01

截至目前,我使用的是這樣的東西:

NULLIF(MAX(COALESCE(n.[SentDate], '12/16/9997')),'12/16/9997') AS [MaxSentDate]

我有99%的把握確保不會有人將日期定為12/16/9997 ,但是我想提出一種適當的解決方案,而不是使用像這樣的12/16/9997解決方案。

嘗試這個 :

SELECT [ID]
     , CASE WHEN MAX(CASE WHEN [Date] IS NULL THEN 1 ELSE 0 END) = 0 THEN MAX([Date]) END
FROM YourTable
GROUP BY [ID]
SELECT ID, [Date]
FROM (
      SELECT ID 
         ,[DATE]
         ,ROW_NUMBER() OVER (PARTITION BY ID ORDER BY CASE WHEN [Date] IS NULL 
                                                           THEN '99991212'
                                                           ELSE [Date] END DESC) RN               
      FROM TABLE_NAME) A
WHERE RN = 1

Working SQL FIDDLE

如果要返回null:

    SELECT id, max([date]) from #t t1
    WHERE not exists (select 1 from #t t2 where t2.date is null and t1.id = t2.id) 
    GROUP BY id
 UNION ALL
    SELECT id, NULL from #t t1 
    WHERE t1.date IS NULL  
    GROUP BY id ;

您可以使用COUNT(*) = COUNT([DATE])來檢查組中是否為空(右側部分返回COUNT ,表示該組中的所有值,左側部分僅返回非空值):

SELECT [ID]
     , CASE WHEN COUNT(*) = COUNT([DATE]) THEN MAX([DATE]) ELSE NULL END AS [DATE] 
FROM [TEST_TABLE]
GROUP BY [ID]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM