mysql—从sql中其他相同的行获取日期的第一个示例

kxe2p93d  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(319)

我有一个表,其中有多个基本相同的行,除了时间戳。a、b和c将有许多排列,但我只需要它们中最早的时间戳。
现在我知道我可以在将整个集合加载到内存并进行处理之后通过编程来完成这项工作,但是我觉得有一种本地方法可以在sql中完成这项工作,而且可能会更高效。我想知道是否完全可以用sql来实现这一点。
为了一个具体的例子,下面是一个简化的版本。为了简单起见,我将在timestamp字段中添加一年。

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解决方案是否可行。
非常感谢。

sqxo8psd

sqxo8psd1#

一个简单的方法是使用 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) .

l7mqbcuq

l7mqbcuq2#

你可以用 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

相关问题