当前位置: 首页 > 面试题库 >

SQL Server:GROUP BY中的最后一个条目

和斌
2023-03-14
问题内容

我在MSSQL2005中有下表

id | business_key | result
1 | 1 | 0
2 | 1 | 1
3 | 2 | 1
4 | 3 | 1
5 | 4 | 1
6 | 4 | 0

现在我想根据business_key分组,返回具有最高ID的完整条目。所以我的预期结果是:

business_key | result
1 | 1
2 | 1
3 | 1
4 | 0

我敢打赌,有一种方法可以实现这一目标,但目前我还看不到。


问题答案:

替代解决方案,可能会给您带来更好的性能(双向测试并检查执行计划):

SELECT
     T1.id,
     T1.business_key,
     T1.result
FROM
     dbo.My_Table T1
LEFT OUTER JOIN dbo.My_Table T2 ON
     T2.business_key = T1.business_key AND
     T2.id > T1.id
WHERE
     T2.id IS NULL

该查询假定该ID是唯一值(至少对于任何给定的business_key而言),并将其设置为NOT NULL。



 类似资料:
  • 问题内容: 我想知道用JPA获取表的最后一个条目的最佳方法是什么。在Sql中,我正在寻找的将是: 我当时在考虑model.count(),但这听起来更像是一种破解,而不是一个好的解决方案;) 问题答案: 您可以使用看起来与查询非常相似的。 建立后,您可以致电 其次是 编辑:我的错误:请注意下面的mtpettyp的注释。 不要使用query.getSingleResult(),因为如果返回的行不完全

  • 现在我要在这个映射上进行迭代,并使用迭代器移除第n个元素。 我想从javadoc中,remove的语义已经定义好了。 但是,根据映射的实现(即HashMap与TreeMap)的不同,是在之前还是之后执行是有区别的。 中的结果 到目前为止还不错,但是如果我在访问条目之前删除该元素: 输出出乎意料 编辑:TreeMap迭代器的源代码。remove()

  • 问题内容: 有一个包含数据的表,如下所示: 如果我运行查询,我将得到的结果为: 什么查询将返回以下结果? 即,应返回每个组中的最后一条记录。 目前,这是我使用的查询: 但这看起来效率很低。还有其他方法可以达到相同的结果吗? 问题答案: MySQL 8.0现在支持窗口功能,就像几乎所有流行的SQL实现一样。使用这种标准语法,我们可以编写每组最多n个查询: 以下是我在2009年为此问题写的原始答案:

  • 问题内容: 我试图弄清楚如何禁止在stdout上显示用户输入。 后跟任何打印语句将保留用户键入的内容。不会显示用户键入的内容,但会保留“ Password:”提示。 为了解决这个问题,我只想删除最后一行(这也会从行尾删除换行符)。 问题答案: 您可能可以使用VT100控制代码执行所需的操作。 可能是这样的:

  • 问题内容: 这是我一直在绞尽脑汁的一个问题。假设我有一个表,该表具有一系列时间戳和一个零件号作为主键。该表存储增量更改,这意味着对于每个时间戳记,如果字段更改,则记录该更改。如果该字段保持不变,则对于新的时间戳,该字段为NULL。这是基本思想。 是主键。第二条记录中的s表示自第一条记录以来未更改的值。 我想要做的是为按零件分组的每个字段选择最新值。例如,给定以上条目,a5部分的结果将为153,5,

  • 我正在使用Hibernate JPA运行本机查询并返回结果列表。 我想要获取的结果列表并添加到映射中以供将来处理,但是返回的映射仅包含ResultList中的最后一项。 如何让结果列表在地图中添加多个条目? --编辑-- 预期地图内容: 940 7107877 940 7107664 940 7112778 940 7112479 940 7114678 940 7113504 println输出