Sql 从数据库中获取最后一个子项

Sql 从数据库中获取最后一个子项,sql,sqlanywhere,Sql,Sqlanywhere,我的情况: Table A ( ID Parent_Id TimeStamp ) 根目录的父目录Id为null,子目录的父目录Id为null 我只想得到每一张桌子的最后一个孩子。 我不想要父亲和孩子。除了最后一个 有没有可能构建一个SQL来实现这一点 附言:我正在使用sql anywhere 11。也许ansi sql可以解决这个问题,我不确定 编辑:编辑以提供其他详细信息 我不想要元素的最后一个子元素 例如: Id 1 父空值 Id 2 父1 最后一个孩子 父1 Id 4 父空值 最后一个孩

我的情况:

Table A
(
ID
Parent_Id
TimeStamp
)
根目录的父目录Id为null,子目录的父目录Id为null

我只想得到每一张桌子的最后一个孩子。 我不想要父亲和孩子。除了最后一个

有没有可能构建一个SQL来实现这一点

附言:我正在使用sql anywhere 11。也许ansi sql可以解决这个问题,我不确定

编辑:编辑以提供其他详细信息 我不想要元素的最后一个子元素

例如:

Id 1 父空值

Id 2 父1

最后一个孩子 父1

Id 4 父空值

最后一个孩子 家长4

我想得到: Id 3 身份证5

换句话说,从表a中选择所有项,其中项的ID不是任何其他项的父ID。这将为您提供图形的所有叶节点

编辑: 您的编辑有点混乱,ID通常不用作排序机制,但无论如何,您给出的示例可以通过此查询完成

SELECT MAX( id )
FROM a
WHERE id NOT IN
  (SELECT parent_id
      FROM a
      WHERE parent_id IS NOT NULL
  )
GROUP BY parent_id

如果“最后一个子项”指的是本身没有子项且通常被称为叶级项的项,则类似这样的内容应该可以:

SELECT ID
 from A
 where ID not in (select Parent_Id from A)
相关子查询版本理解起来有点难,但在大型表上工作得更快:

SELECT ID
 from A OuterReference
 where not exists (select 1 from A where Parenti_ID = OuterReference.ID)
OuterReference是表A的别名

我使用SQL Server,但这是非常基本的语法,只需稍加修改即可使用。

使用存储函数

create function LastChild(in parent integer)
returns integer
begin
    declare res integer;  
    select top 1 id into res from TableA where parent_id = parent order by timeCol desc;
    return res;
end
挑选

select Id, lastchild(id) from TAbleA where parent_id is null
我将研究另一个没有存储函数的解决方案

编辑:不带存储功能:

select Id, (select top 1 id from TableA childs where parent_id = TableA.id order by timeCol desc) from TableA where parent_id = 0

对于Postgres9.4,我必须稍微更新查询以获得唯一的子类别

select count(id) from A as outer_ref where not exists(
    select 1 from A where parent_id=outer_ref.id) and parent_id is not null;

请检查您的答案,因为我提供了更多详细信息。是的!这个函数返回的正是我想要的。谢谢。再次感谢,不带函数的sql版本更适合我。几年后,oops将第一个查询的子查询调整为从父查询Id不为null的位置读取select Parent\u Id。顶级项的ParentId为空,子查询列表中的ParentId为空会把事情搞砸。
select count(id) from A as outer_ref where not exists(
    select 1 from A where parent_id=outer_ref.id) and parent_id is not null;