从SQL中其他相同的行中获取日期的第一个实例

时间:2018-09-28 14:31:21

标签: mysql 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解决方案。

一吨。

2 个答案:

答案 0 :(得分:3)

您可以在时间戳上将Group byMin()函数一起使用。

尝试以下操作:

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

答案 1 :(得分:1)

一种简单的方法是使用where子句和相关子查询:

select t.*
from t
where t.timestamp = (select min(t2.timestamp)
                     from t t2
                     where t2.a = t.a and t2.b = t.b and t2.c = t.c
                    );

为了提高性能,您希望在(a, b, c, timestamp)上建立索引。