我有一个表,其中有多个基本相同的行,除了时间戳。 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解决方案。
一吨。
答案 0 :(得分:3)
您可以在时间戳上将Group by
与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
答案 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)
上建立索引。