【发布时间】:2021-04-28 05:01:17
【问题描述】:
我有一个结构如下的表
| Date | train |
|---|---|
| time1 | train1 |
| time2 | train2 |
| time3 | train1 |
| time4 | train2 |
我想创建一个新表并只保留每个不同火车的最新记录
| Date | train |
|---|---|
| time3 | train1 |
| time4 | train2 |
我应该如何做到这一点?
【问题讨论】:
我有一个结构如下的表
| Date | train |
|---|---|
| time1 | train1 |
| time2 | train2 |
| time3 | train1 |
| time4 | train2 |
我想创建一个新表并只保留每个不同火车的最新记录
| Date | train |
|---|---|
| time3 | train1 |
| time4 | train2 |
我应该如何做到这一点?
【问题讨论】:
一种选择最近行的方法是:
select t.*
from releng_retry_test_phases t
where t.date = (select max(t2.date) from releng_retry_test_phases t2 where t2.train = t.train);
如果你真的想修改表并删除旧的行;
delete t
from releng_retry_test_phases t join
(select t2.train, max(date) as max_date
from releng_retry_test_phases t2
group by t2.train
) t2
using (train)
where t.date < t2.max_date;
【讨论】:
t 是您的表名的别名。您尚未在问题中指定。
您可以使用ROW_NUMBER() 来识别您想要的行:
select date, train
from (
select *,
row_number() over(partition by train order by date desc) as rn
) x
where rn = 1
【讨论】:
WITH temp As(
SELECT *, Row_Number() over (PARTITION BY train ORDER BY date DESC ) as
rowNumber FROM table
)
SELECT date, train FROM temp WHERE rowNumber = 1
你可以使用
row_number()方法。
【讨论】: