sql - 只查询每条主记录的第一条明细记录

标签 sql linq-to-sql

如果我有以下主从关系:

owner_tbl     auto_tbl
---------     --------
owner    ---> owner
              auto
              year

我有下表数据:

owner_tbl     auto_tbl
---------     --------
john          john, corvette, 1968
              john, prius, 2008
james         james, f-150, 2004
              james, cadillac, 2002
              james, accord, 2009
jeff          jeff, tesla, 2010
              jeff, hyundai, 1996

现在,我想执行一个返回以下结果的查询:

john, corvette, 1968
jeff, hyundai, 1996
james, cadillac, 2002

查询应该连接两个表,并对“年”字段上的所有记录进行排序,但只返回每个主记录的第一条详细记录。我知道如何连接表并在“年”字段上排序,但不清楚如何(或是否)我可能只能检索每个所有者的第一个连接记录。

三个相关问题:

  1. 我可以使用 LINQ-to-SQL 执行这种查询吗?
  2. 我可以使用 T-SQL 执行查询吗?
  3. 鉴于其可能的复杂性,最好只为查询创建一个存储过程吗?

最佳答案

使用 Sql Server 2005+ 您可以尝试(完整示例)

DECLARE @owner_tbl TABLE(
        [owner] VARCHAR(50)
)

DECLARE @auto_tbl TABLE(
        [owner] VARCHAR(50),
        [auto] VARCHAR(50),
        [year]VARCHAR(4)
)

INSERT INTO @owner_tbl SELECT 'john'
INSERT INTO @owner_tbl SELECT 'james'
INSERT INTO @owner_tbl SELECT 'jeff'        

INSERT INTO @auto_tbl SELECT 'john','corvette','1968'
INSERT INTO @auto_tbl SELECT 'john','prius','2008'
INSERT INTO @auto_tbl SELECT 'james','f-150','2004'
INSERT INTO @auto_tbl SELECT 'james','cadillac','2002'
INSERT INTO @auto_tbl SELECT 'james','accord','2009'
INSERT INTO @auto_tbl SELECT 'jeff','tesla','2010'
INSERT INTO @auto_tbl SELECT 'jeff','hyundai','1996'

;WITH Autos AS(
        SELECT  *,
                ROW_NUMBER() OVER(PARTITION BY a.owner ORDER BY a.year) ROWID
        FROM    @auto_tbl a
)
SELECT  *
FROM    Autos
WHERE   ROWID = 1
ORDER BY owner

关于sql - 只查询每条主记录的第一条明细记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2399792/

相关文章:

sql - 基于子字符串连接2个sql表

sql - 根据 CASE 从 3 个表之间的 LEFT JOIN 有条件地返回值

mysql - 为什么MySQL的最大时间限制是838 :59:59?

sql - Hadoop 数据- 在 SQL 助手中将字符串时间戳转换为 Hadoop 日期

sql - 将 "DBML"文件转换为 "SQL database file"

c# - Linq-to-SQL 何时运行查询?

mysql - 错误 1415 : Not allowed to return a result set from a function

c# - Linq-to-SQL 中十进制的一元减法

C# LINQ to SQL : Refactoring this Generic GetByID method

linq - 将 dbml 中的连接字符串指向 app.config