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

SQL-重复时选择最新记录

赏夕
2023-03-14
问题内容

我想选择一堆在大多数情况下都是唯一的记录,但是有一些记录会发生两次。我希望只能选择具有最新日期的记录。到目前为止,这是我的查询:

SELECT tb1.id,tb1.type,tb1.date

FROM Table tb1

WHERE tb1.type = 'A' OR 'B'
AND tb1.date = (SELECT TOP 1 tb2.date
               FROM Table tb2  
               WHERE tb2.date = tb1.date
                ORDER BY tb2.date DESC)

就检索具有重复项的记录的最新记录而言,这是可行的,但是那些没有重复项的记录根本不会出现。

感谢您的帮助,如果我错过了一些显而易见的事情,我深表歉意。我是SQL游戏的新手。


问题答案:

有几种方法可以执行此操作,一种方法是像这样使用ROW_NUMBER:

SELECT id, type, date
FROM 
(
    SELECT tb1.id, tb1.type, tb1.Date, 
        ROW_NUMBER() OVER (PARTITION BY tb1.id ORDER BY tb1.Date DESC) AS RowNo
    FROM Table tb1
    WHERE tb1.type IN ('A','B')
) x
WHERE x.RowNo = 1

这将返回具有最新日期的 每个不同ID 值的行。



 类似资料:
  • 问题内容: 我有下表: 我想从一个特定的组中选择前20个不同的名称,该组按该组中最常见的名称排序。对于第1组,此示例的结果将返回(a-3次出现,b-2次出现和c-1次出现)。 谢谢你。 问题答案:

  • 问题内容: 我确实进行了搜索,发现该SQL在最近的日期之前选择了行,该 行 与我想要的日期非常接近,但我似乎无法使它起作用。 我收到一个错误,因为选择列表中的列“ ID”不包含在聚合函数或GROUP BY子句中,所以它无效。 我想要每个不同名称的最新日期 这是我想要的一个例子 理想的结果 我正在使用Microsoft SQL Server 2008 感谢您的帮助或指向正确的方向 问题答案: Sel

  • 问题内容: 我需要帮助以获取针对这种情况的解决方案。我有一个包含记录的表,有一个字段sku,在此记录中,我有sku出现多次。表结构是这样的rid | id | sku | name rid是auto_increment,其中id是varchar,如果表上多次有任何sku可用,则记录看起来像这样 我使用此sql语句获取仅出现一次的记录 这带来了仅添加一次的记录,因此根据以上给出的记录,仅掉6是输出

  • 问题内容: 我有一张桌子,如下所示: 请注意,MyDate格式为YYMMDD,而MyTime为24小时格式。 我想用最新的MyDate和MyTime返回唯一的MyKey的结果。预期的结果将是这样的: 任何帮助都感激不尽。谢谢。 问题答案: 首先,将日期和时间列合并为日期时间,以便轻松订购它们。自从我使用Sql Server以来已经有一段时间了,但是row_number()函数和分区是一种查找由另一

  • 问题内容: 我有以下表格/列: 有一对多的关系 有一对多的关系 对于每个,我都需要获取最新的价值。如何使用SQL执行此操作。我已经尝试使用,但我似乎无法弄清楚如何参与和成功。 理想结果集将包含与最新记录的所有列结合的所有。 注意:使用 MS SQL 2005+ 问题答案: 看看使用ROW_NUMBER 就像是

  • 我有一个可以包含多个可选ID的类,该类将选择第一个可用ID并将其返回给调用方。像下面这样。 我想使用像map和orElse这样的可选方法,但在这种情况下,它会导致太多的嵌套。另外两个伪代码选项可能是。 有没有比我现有的方法更好的方法?我很想通过做香草isPresent()检查来避免嵌套。