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

SQL选择具有不同的“名称”列的最新记录

百里沛
2023-03-14
问题内容

我确实进行了搜索,发现该SQL在最近的日期之前选择了行,该
行 与我想要的日期非常接近,但我似乎无法使它起作用。
我收到一个错误,因为选择列表中的列“ ID”不包含在聚合函数或GROUP BY子句中,所以它无效。

我想要每个不同名称的最新日期

Select ID,Name,Price,Date
From  table
Group By Name
Order By Date ASC

这是我想要的一个例子

         Table
ID| Name | Price |   Date
---------------------------------
0 |  A   |  10   | 2012-05-03
1 |  B   |   9   | 2012-05-02
2 |  A   |   8   | 2012-05-04
3 |  C   |  10   | 2012-05-03
4 |  B   |   8   | 2012-05-01

理想的结果

ID| Name | Price |   Date
------------------------------
2 |  A   |   8   | 2012-05-04
3 |  C   |  10   | 2012-05-03    
1 |  B   |   9   | 2012-05-02

我正在使用Microsoft SQL Server 2008

感谢您的帮助或指向正确的方向


问题答案:

Select ID,Name, Price,Date
From temp t1
where date = (select max(date) from temp where t1.name =temp.name)
order by date desc

这是一个SQL Fiddle,上面有一个演示

或者如Conrad所指出的,您可以使用INNER JOIN(另一个带有演示的SQL
Fiddle):

SELECT t1.ID, t1.Name, t1.Price, t1.Date 
FROM   temp t1 
INNER JOIN 
(
    SELECT Max(date) date, name
    FROM   temp 
    GROUP BY name 
) AS t2 
    ON t1.name = t2.name
    AND t1.date = t2.date 
ORDER BY date DESC


 类似资料:
  • 问题内容: 在SQL中,将行复制到另一个(备份)表中。如果备份表具有不同的结构(或不同的列名称),这可能吗?如果没有,实现此目标的最佳方法是什么? 这是我想做的:具有columns 。我想将一些行从该表复制到另一个具有column的表。内容进入,对等 问题答案: 该 列名 不事可言,只要该 数据类型 相匹配。 如果列的数据类型不匹配,请尝试相应地强制转换值。 只需尝试 使用小的虚拟表。确保明确列出

  • 问题内容: 我正在尝试使用BCP将存储过程导出到.csv文件。它确实为我提供了.CSV格式的输出文件,但它不显示列名。下面是脚本。请看看,让我知道我在想什么 问题答案: 经过大量的跟踪和错误之后,下面是有关如何添加列的答案 首先创建一个header.txt文件(在头文件中添加所有头文件),例如,如果头文件需要名字,姓氏等 第二,将以下查询粘贴到您的存储过程中

  • 问题内容: 我正在尝试查询sybase服务器,以获取我们为测试目的而持有的不同类型数据的示例。 我有一张看起来像下面的表格(摘要) 正如我提到的那样,我想要每种类型的示例,因此对于上表,它需要一个类似的结果集(实际上,我只想要ID): 我尝试了以下查询的多种组合,但它们要么是无效的SQL(对于sybase),要么返回了无效的结果 您知道如何实现此查询吗? 问题答案: 也许您必须使用聚合函数或用于列

  • 问题内容: 我想编写一个简单的查询来选择PostgreSQL中的许多列。但是,我不断收到错误-我尝试了一些选项,但它们对我没有用。目前,我收到以下错误: org.postgresql.util.PSQLException:错误:“列”处或附近的语法错误 要获取具有值的列,请尝试以下操作: 有任何想法吗? 问题答案: 是 保留字 。除非您双引号,否则不能将其用作标识符。像:。 不过,这并不意味着您应

  • 问题内容: 我有下表: 我想做的是选择3条最近的记录(按时间desc),它们的s是不同的。因此,在这种情况下,结果将是:5、4和2。 = 3将被跳过,因为有相同字段的最近记录。 这是我尝试做的事情: 然而,我最终得到的行= 5, 3 ,和 1 而不是5,4,2按预期方式。 有人可以告诉我为什么这个查询不会返回我期望的结果吗?我尝试将ORDER BY更改为ASC,但这只是将返回的行重新排列为1、3、

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