【问题标题】:In SQL, how to select rows with matching values in one column, based on earliest date in another column在 SQL 中,如何根据另一列中的最早日期选择一列中具有匹配值的行
【发布时间】:2018-01-19 08:39:10
【问题描述】:

我认为这应该是一个简单的 SQL 练习,但我不确定它是如何完成的,因为我是使用 SQL 查询 dbs 的新手。我有一个看起来像这样的表:

select * from myschema.mytable

customer_name                   date
         nick    2017-06-19 19:26:40
          tom    2017-06-21 19:24:40
        peter    2017-06-23 21:25:10
         nick    2017-06-24 13:43:39

我希望此查询只为每个唯一名称返回一行。具体来说,我希望查询返回每个 customer_name 与 earliest 日期的行。在这种情况下,应返回 nick 的第一行(日期为 2017-06-19),而不是日期为 2017-06-24 的另一行。

这是一个简单的 SQL 练习吗?

谢谢!

【问题讨论】:

  • 您使用的是哪个DBMS 产品?后格雷斯?甲骨文? “SQL”只是一种查询语言,而不是特定数据库产品的名称。
  • 你看过聚合函数吗?

标签: sql


【解决方案1】:

一个简单的MIN 就可以了:

SELECT
    customer_name,
    MIN(date) AS earliest_date
FROM myschema.mytable
GROUP BY customer_name;

【讨论】:

    【解决方案2】:

    对于此类问题,您可以使用聚合函数。基本上必须做的是按名称对行进行分组并选择最短日期:

    select cutomer_name, MIN(date)
    FROM myschema.mytable
    GROUP BY customer_name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多