显示 table 组中具有最小时间戳的整个记录
Show entire record from table with minimum timestamp in a group
我已经尝试了大约三个小时来解决这个问题,但找不到解决方案。
如何在 table 中显示每个名称第一次出现(最短时间)的整行(所有 20 列)?
例如,我想做这样的事情,但行不通:
SELECT name, MIN(time), col1, col2, col3, col4
FROM table
GROUP BY name;
你必须先得到每个名字的最短时间,然后在 name/time 匹配的地方加入你原来的 table。
获取最短时间:
SELECT name, MIN(time) AS minTime
FROM myTable
GROUP BY name;
然后,获取所有列:
SELECT m.*
FROM myTable m
JOIN(
SELECT name, MIN(time) AS minTime
FROM myTable
GROUP BY name) tmp ON tmp.name = m.name AND tmp.minTime = m.time;
大多数数据库支持 ANSI 标准 window 函数。有了这些,你就可以做到:
select t.*
from (select t.*, row_number() over (partition by name order by time) as seqnum
from table t
) t
where seqnum = 1;
我已经尝试了大约三个小时来解决这个问题,但找不到解决方案。
如何在 table 中显示每个名称第一次出现(最短时间)的整行(所有 20 列)?
例如,我想做这样的事情,但行不通:
SELECT name, MIN(time), col1, col2, col3, col4
FROM table
GROUP BY name;
你必须先得到每个名字的最短时间,然后在 name/time 匹配的地方加入你原来的 table。
获取最短时间:
SELECT name, MIN(time) AS minTime
FROM myTable
GROUP BY name;
然后,获取所有列:
SELECT m.*
FROM myTable m
JOIN(
SELECT name, MIN(time) AS minTime
FROM myTable
GROUP BY name) tmp ON tmp.name = m.name AND tmp.minTime = m.time;
大多数数据库支持 ANSI 标准 window 函数。有了这些,你就可以做到:
select t.*
from (select t.*, row_number() over (partition by name order by time) as seqnum
from table t
) t
where seqnum = 1;