sql - 为另一个表中的每个 ID 从表中选择前 1 个

标签 sql sql-server tsql

表结构是:

create table fruit (
  id int identity(1,1),
  name varchar(max)
)

create table fruit_allocation (
  id int identity(1,1),
  fruit_id int references fruit(id),
  customer_id int references store(id),
  amount float,
)

create table measurement (
  fruit_allocation_id int references fruit_allocation(id),
  measurement_date datetime,
  measurement float,
)

每个水果可以分配给多个客户,创建一个 Fruit_allocation 记录。每个fruit_allocation 记录可以有多个度量。

我想为每个给定水果 ID 的水果分配选择最新的测量值

到目前为止,我有以下几点:
select * 
  from measurement 
 where fruit_allocation_id in (select id 
                                 from fruit_allocation 
                                where fruit_id = 10)

这将返回该水果的所有测量值,我只想为每个水果分配返回 1 个测量值。

最佳答案

您可以 CROSS APPLY

select a.*, m.*
from fruit_allocation a
cross apply (
    select top 1 *
    from measurement m
    where m.fruit_allocation_id = a.id
    order by m.measurement_date desc
) m
where a.fruit_id = 10

关于sql - 为另一个表中的每个 ID 从表中选择前 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5073089/

相关文章:

mysql - 如何将此 SQL 查询转换为 Laravel 语法?

sql-server - SQL Server Express 4GB 限制

java - 无法在 JDBC 中获取插入的主键

c# - 在 C# 中存储 SqlServer 的 raiserror 消息

php - 如何使用 PHP 获取 SQL 表一行中所有整数的总和?

sql - 从 SUM(column) <= @variable 的表中选择前 X

sql - 根据列的结果查询添加列

sql - 在 SQL Server 2008 中加密数据库表

sql - 具有可变条件和错误消息的存储过程

带有通配符的 SQL Like 在某些字母上返回错误的结果