gpt4 book ai didi

sql - 为 1 个表上的每条记录选择前 1 条记录

转载 作者:行者123 更新时间:2023-12-03 18:35:59 25 4
gpt4 key购买 nike

我在查询时遇到问题。我需要的结果显示表中具有相同 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

如你所求..
  • OVER 就像选择查询中的分组和排序区域,但它仅由 ROW_Number()/RANK()/DENSE_RANK()/NTILE(n) 等函数使用。 see here for more info
  • PARTITION BY 就像有一个组,在我的例子中,我按 id
  • 对行进行了分区或分组
  • ORDER By 就像在选择查询中使用 order by 子句一样

  • ROW_Number() 是 SQL Server 中的一个函数,它生成一个从 1 到 N(直到最后一条记录)的整数值序列,每次 PARTITION BY 区域更改其值时,我们都会重置由 ROW_Number() 函数生成的数字。

    关于sql - 为 1 个表上的每条记录选择前 1 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22470582/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com