在特定id的最大日期返回值,其中null为t-sql中的最大值

时间:2017-06-26 08:00:31

标签: sql-server sql-server-2008 tsql

我有这张桌子。


ID       Date       Value 
___      ____       _____
3241     9/17/12    5
3241     9/16/12    100
3241     9/15/12    20
4355     9/16/12    12
4355     9/15/12    132
4355     9/14/12    4
1001     NULL       89
1001     9/16/12    125
5555     NULL       89
1234     9/16/12    45
2236     9/15/12    128
2236     9/14/12    323
2002     9/17/12    45 

我想选择按ID分组的最大日期,并将 NULL 作为最大值,应该在结果中得到类似的内容。


ID       Date       Value 
___      ____       _____
3241     9/17/12    5
4355     9/16/12    12
1001     9/16/12    125
5555     NULL       89
1234     9/16/12    45
2236     9/15/12    128
2002     9/17/12    45

我找到了一个解决方案,但不包括 NULL 作为最大值 @bluefeet的解决方案 Return value at max date for a particular id


SELECT t1.id,
       t2.mxdate,
       t1.value
FROM yourtable t1
INNER JOIN
  ( SELECT max(date) mxdate,
           id
   FROM yourtable
   GROUP BY id) t2 ON t1.id = t2.id
AND t1.date = t2.mxdate

我还搜索了一个解决方案,看看如何在 t-sql 中选择 NULL 最大值,所以我找到了@Damien_The_Unbeliever How can I include null values in a MIN or MAX? < / p>


SELECT recordid,
       MIN(startdate),
       CASE
           WHEN MAX(CASE
                        WHEN enddate IS NULL THEN 1
                        ELSE 0
                    END) = 0 THEN MAX(enddate)
       END
FROM tmp
GROUP BY recordid

但我陷入了困境,我不知道如何在这两种解决方案之间进行合并以获得我想要的东西。

PS:我正在使用 SQL SERVER 2008

1 个答案:

答案 0 :(得分:2)

您可以使用此

SELECT
ID
,[Date]
,[Value]
FROM(
SELECT 
* 
, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ISNULL([Date],'9999-12-31') DESC) AS Row#
FROM yourtable
) A WHERE Row# = 1