首页 > 解决方案 > 从 SQL 中其他相同的行获取日期的第一个实例

问题描述

我有一个表,其中有多个基本相同的行,除了时间戳。a、b 和 c 会有很多排列,但我只需要它们中最早的时间戳。

现在我知道我可以在将整个集合加载到内存和处理后以编程方式执行此操作,但我觉得在 SQL 中可能有一种本地方式来执行此操作,并且可能更有效。我想知道是否可以纯粹在 SQL 中执行此操作。

为了一个具体的例子,下面是一个简化的版本。为了在示例中简洁起见,我将在时间戳字段中输入一年。

id | a | b | c | timestamp
1  | 1 | 2 | 1 | 2018
2  | 1 | 1 | 1 | 2016
3  | 1 | 1 | 1 | 2017
4  | 1 | 2 | 1 | 2010
5  | 1 | 2 | 3 | 2018

在此示例中,我需要以第 2、4 和 5 行结束。

作为参考,我使用的是 MySQL 和 PHP。我已经以编程方式处理了大量记录,但我还有几十个记录集要处理。虽然我的解决方案是在我加载它们的地方工作,然后迭代以捕获最早的记录,但我真的很想了解纯 SQL 解决方案是否可行。

万分感谢。

标签: mysqlsql

解决方案


您可以在时间戳上使用Group bywith Min()函数。

尝试以下操作:

SELECT t.a, t.b, t.c, MIN(t.timestamp) as timestamp 
FROM your_table AS t 
GROUP BY t.a, t.b, t.c

推荐阅读