【问题标题】:The oldest person in a birthday table. SQL subquery生日餐桌上最年长的人。 SQL 子查询
【发布时间】:2013-11-22 05:05:02
【问题描述】:

我正在努力寻找来自佛蒙特州和纽约州的会员生日表中最年长的人。我的成员类似于以下内容:

Members
-------
MemberID, Firstname, Lastname, Birthday, Region

我制定了以下子查询:

SELECT lastname 
FROM members 
WHERE region = 'VT' 
  AND year(birthday) > (SELECT year(birthday) 
                        FROM members 
                        WHERE region = 'NY')

SQL 查询系统告诉我它返回了不止一行。我在其中遗漏了什么,它在逻辑上是否正确?再一次,我是在问我如何才能找到佛蒙特州所有比纽约所有成员都年长的成员。

【问题讨论】:

  • 我所说的'>'逻辑运算符是外部查询的生日年份是否大于内部查询的生日

标签: mysql sql


【解决方案1】:

你需要找到纽约会员的最大生日,这样你就只能得到一个值。然后使用该值查找大于 NY 最大值的 VT 成员

你可以试试这个:

select lastname 
from members where region = 'VT' and year(birthday) >
(select max(birthday) from members where region = 'NY')

逻辑运算符> 要求运算符右侧只有一个值。

【讨论】:

  • 另外,您可以从查询中删除 year 中的 year(birthday)。你不需要那个。
【解决方案2】:
   select top 1 * from table where region='vermont' or region ='newyork' order by year(birthday) desc

【讨论】:

    【解决方案3】:

    做:

    select lastname from members where region = 'VT' and year(birthday) 
    >
    (select year(birthday) from members where region = 'NY' ORDER BY birthday ASC LIMIT 1)
    

    【讨论】:

    • 为什么我需要限制为 1 的 ASC(升序)?
    • @user2948897 升序是递增顺序,LIMIT 1 会给你一个结果,所以它给你的生日是表中最高的
    【解决方案4】:

    我没有得到这些答案中的大部分。他们没有解决 NY 和 VT 的要求(除了重现模棱两可的问题与“我尝试过的”)。当然,年龄越大的人,他们的生日越小

    SELECT lastname 
    FROM members 
    WHERE region in('VT' ,'NY') and birthday = 
    (SELECT MIN(birthday) 
    FROM members where
    region in('VT' ,'NY') )
    

    【讨论】:

      猜你喜欢
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 2011-09-11
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多