当前位置: 首页 > 知识库问答 >
问题:

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

管玉堂
2023-03-14

我有这张桌子。


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返回特定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找到了这个解决方案如何在MIN或MAX中包含空值?


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个答案

司徒泰
2023-03-14

你可以用这个

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
 类似资料:
  • 问题内容: 这是我的SQL Server表 这似乎很容易做到,但我不知道为什么会被卡住。我只想为每个id选择max(date)和该max(date)处的值。我想忽略相对于每个ID而言不是max(date)的所有其他日期。 这是我希望表格看起来像的样子: 我尝试通过使用max(date)进行分组,但没有进行任何分组。我不确定自己在做什么错。在此先感谢您的帮助! 问题答案: 您可以使用以下内容: 观看

  • 我们想写一个函数,它将二叉树的根作为输入,并使用类PairAns返回该树的最大值和最小值。 我在这个问题的基础案例中遇到了一些问题 我希望答案是正确的,但在所有测试用例中都出现了运行时错误。

  • 问题内容: 我正在尝试编写一个查询,每天从价格明细表中获取每个商品的最低和最高价格。 在价格明细表中,每天设置多次价格,因此同一日期有很多记录。因此,我想要一个表,其中每个日期都有一行,然后将该表连接到同一张表,因此对于每个不同的日期,我都需要最小值和最大值。 SQL查询 概括 餐桌在同一天设定了许多价格。想要每个交易所报价的每天的最小值和最大值。 谢谢 问题答案: 一个简单的应该工作: 不知道为

  • 我需要编写一个递归函数,返回ArrayList中最大和最小的元素以及相应的索引。要返回这四项,我需要返回一个对象,该对象是名为MinMaxObject的内部类的实例,它有四个已定义的私有变量:max、min、maxPos、minPos类型为double、double、int和int。 我自己到了这里,我需要开始递归,但我不知道如何开始。如果有人能给我指明正确的方向,我就能把它捡起来。

  • 问题内容: 从如下所示的数组中,如何获取数组中最大值的索引。对于下面的数组,期望的结果将为‘11’。 问题答案: 我的解决方案是: 注意: 这样,您可以检索与给定 最大值 相关的 每个键 。 __ 如果您只对 其中一个键 感兴趣,只需使用 $ maxs [0]

  • 问题内容: 表格示例: 所需的输出(不是确切的格式或上市顺序),每台计算机上每个应用程序的最新安装: 我的SQL语句: 这给了我: 并不是 如我所料。 如果我 仅 选择MAX(date),而没有其他选择,则MAX(date)有效。但是,那时我没有任何数据可以使用(仅是最新日期)。 我不是SQL忍者,所以我很快就会因此而挠头。 问题答案: 尝试这样: 内部查询是为您获取每对计算机和应用程序的max(