SQL将属性与同一个表中的另一行属性进行比较

问题描述:

假设我有一张包含姓名和出生日期的人员表。 如何才能选择所有人的名字谁拥有比其他人更多的DofB,同时只知道人名而不是DofB?SQL将属性与同一个表中的另一行属性进行比较

+1

提供样品数据和输出 –

+0

您尝试过什么吗? – Kobi

+0

@Kobi我不确定这是为什么我要求的语法 – Rizhiy

你有一些选择,但我喜欢这里的联接。

假设你有一个唯一的名称字段(使用类似ID的唯一行标识符可能是更好的):

SELECT p.name 
    FROM person p 
    JOIN person po 
    ON po.name = :name_that_you_know 
WHERE p.dob > po.dob 

这种交叉连接每个人的行与你指定的人的行。 结果由出生日期比较过滤。

或者,你可以在JOIN条件进行过滤:

SELECT p.name 
    FROM person p 
    JOIN person po 
    ON po.name = :name_that_you_know 
    AND po.dob < p.dob 

使用简单的MySQL查询像

SELECT a.name, b.dob FROM table a INNER JOIN table b ON b.name = 'john' AND a.dob > b.dob

类似的东西

+0

我不知道出生日期,我只知道这个人的名字。 – Rizhiy

这将找到一个DOB比你一个人不知道自己的出生日期的更大(或以下)所有的人,但知道他们的名称:

SELECT name 
FROM yourTable 
WHERE DOB > (SELECT DOB FROM yourTable WHERE name = 'nameyouknow');