【问题标题】:MAX(date), GROUPBY, with WHEREMAX(日期),GROUPBY,与 WHERE
【发布时间】:2016-11-08 15:24:55
【问题描述】:

我有 3 列,

Firm_Name
Firm_Status
Firm_Date

表名:测试

我不确定为什么这似乎不起作用,

Select Firm_Name, Firm_Status, Max(Firm_Date)
From Test
WHERE
Firm_Status = 'Incorporated'
GROUP BY Firm_Name, Firm_Status

基本上,我想要表格中的最后一个日期,以及姓名和状态。

我正在寻找每一行的最大日期。有重复的公司名称。如果两行是同一家公司,并且每一行都有不同的日期,我想要最大日期以及该行中该公司的其余信息。

谢谢

【问题讨论】:

  • 似乎不起作用”是什么意思?表格中的“last”日期是什么意思?您只是在寻找一张唱片吗?您的 DBMS(SQL Server、MySQL、Oracle 等)是什么?你能提供一些样本数据和期望的结果吗?
  • 抱歉,不,我正在寻找每一行的最大日期。有重复的公司名称。如果两行是同一家公司,并且每一行都有不同的日期,我想要最大日期以及该行中该公司的其余信息。
  • 根据我的说法,您的查询是正确的,添加预期结果和实际结果,以便轻松识别问题所在。
  • 我也不确定问题出在哪里。对于某些结果,我仍然得到重复的 Firm_Name,并且得到两个不同的日期。它没有选择最大日期。我没有加入任何其他表,查询和表就是我正在使用的全部内容。

标签: sql greatest-n-per-group


【解决方案1】:

简单、便携的方式:

Select Firm_Name, Firm_Status, Firm_Date
From Test
WHERE Firm_Status = 'Incorporated'
  and Firm_Date = (select Max(Firm_Date) from test
                   WHERE Firm_Status = 'Incorporated')

【讨论】:

  • 对不起,我应该解释一下我在找什么。我在帖子中添加了一个编辑。
【解决方案2】:

您可以尝试以下方法:

  SELECT Firm_Name, Firm_Status, Firm_Date
    FROM Test
    WHERE Firm_Date = (SELECT MAX(Firm_Date) FROM Test WHERE Firm_Status = 'Incorporated')

【讨论】:

    【解决方案3】:

    如果要表格中的最后一个日期,那么最简单的方法是fetch first 1 row onlyorder by

    Select Firm_Name, Firm_Status, Firm_Date
    From Test
    where Firm_Status = 'Incorporated'
    order by firm_date desc
    fetch first 1 row only;
    

    group by 是不必要的,甚至会分散注意力。

    请注意,某些数据库将fetch first 1 row only 拼写为limitselect top

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多