我在查询时遇到问题。我需要的结果显示表中具有相同 id 的每条记录的前 1。这是表描述。
表 people
:
id | name |
--------------
01 | john |
02 | alex |
表
job
:id | job | date start |
---------------------------------
01 | student | 1/1/2013 |
01 | employee | 1/1/2014 |
01 | manager | 3/18/2014 |
02 | student | 3/1/2013 |
02 | engineer | 3/3/2014 |
我需要结果为每个 id 显示 1 行。
这是我的 SQL 查询:
select id,name,job,date_start
from people,job
group by date_start,id,name,job
我从那个查询中得到了错误的结果。我不知道如何只为每个 ID 显示 1 条记录。
这是我想要的结果:
查询结果
id | name | job | date_start |
----------------------------------
01 | john | manager | 3/18/2014 | -> max date from id='01'
02 | alex | engineer| 3/3/2014 | -> max date from id='02'
它按日期排序,并从每个具有最大日期的 id 中仅选择 1 个结果。
我怎样才能做到这一点 ?
最佳答案
试试这个
WITH j AS
(
SELECT
ROW_NUMBER() OVER(PARTITION BY id ORDER BY date_Start DESC) AS RowNumber,
id, job, date_start
FROM job
)
select p.id, p.name, j.job, j.date_start
from people p
inner join j
on p.id = j.id
and j.RowNumber = 1
如你所求..
ROW_Number() 是 SQL Server 中的一个函数,它生成一个从 1 到 N(直到最后一条记录)的整数值序列,每次 PARTITION BY 区域更改其值时,我们都会重置由 ROW_Number() 函数生成的数字。
关于sql - 为 1 个表上的每条记录选择前 1 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22470582/