gpt4 book ai didi

sql - 如何根据特定顺序选择每个组的顶行?

转载 作者:行者123 更新时间:2023-12-02 05:16:23 25 4
gpt4 key购买 nike

假设我有一个包含以下数据的表格。

  • 表名[数据]。
  • PrimaryID:表的主ID。
  • ParentID:表引用自身;这是对 PrimaryID 的 FK 约束。
  • DateTime:上次更新的时间。

    PrimaryID        ParentID          Date
    1 null 1/1/2013
    2 1 1/2/2013
    3 1 1/3/2013
    4 null 1/4/2013
    5 4 1/5/2013
    6 null 1/6/2013

我想选择如下所示的结果:

PrimaryID        ParentID
3 1
5 4
6 6

对于每个“组”(定义为具有相同 ParentID 和该父项的所有条目),我想选择最新的行,并替换一个空的 ParentID(通常表示该行是parent) 与行自己的 PrimaryID。

我真的不知道从哪里开始生成这样的查询。

我有一个内部选择,看起来像这样:

(SELECT PrimaryID, ISNULL(ParentID, PrimaryID) as ParentID, Date FROM [Data])

这看起来是正确的开始方向,但我不知道从哪里开始。

最佳答案

您可以使用row_number():

select primaryid,
coalesce(ParentID, PrimaryID) parentid
from
(
select *,
row_number() over(partition by coalesce(ParentID, PrimaryID)
order by date desc) rn
from yourtable
) src
where rn = 1

参见 SQL Fiddle with Demo

关于sql - 如何根据特定顺序选择每个组的顶行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14567847/

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