【问题标题】:How to keep the latest record of a table如何保持表格的最新记录
【发布时间】:2021-04-28 05:01:17
【问题描述】:

我有一个结构如下的表

Date train
time1 train1
time2 train2
time3 train1
time4 train2

我想创建一个新表并只保留每个不同火车的最新记录

Date train
time3 train1
time4 train2

我应该如何做到这一点?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    一种选择最近行的方法是:

    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;
    

    【讨论】:

    • 表 prism.infrastructure.t 不存在
    • 我尝试了第一个查询,select max(t2.date) from t t2 where t2.train = t.train,似乎只匹配 max date 而不是 train id date。
    • @Pythoner 。 . . t 是您的表名的别名。您尚未在问题中指定。
    • 你是对的,我正在尝试使用 t 作为我的表的别名,但它不起作用
    • SELECT releng_retry_test_phases.* FROM releng_retry_test_phases WHERE releng_retry_test_phases.train_start_time = ( SELECT MAX(t2.train_start_time) FROM releng_retry_test_phases t2 WHERE t2.train_id = releng_retry_test_phases.train_id );
    【解决方案2】:

    您可以使用ROW_NUMBER() 来识别您想要的行:

    select date, train
    from (
      select *,
        row_number() over(partition by train order by date desc) as rn
    ) x
    where rn = 1
    

    【讨论】:

      【解决方案3】:
      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()方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-13
        • 1970-01-01
        • 2020-12-19
        • 2011-08-31
        • 2020-11-07
        • 1970-01-01
        • 2021-02-20
        • 2021-08-25
        相关资源
        最近更新 更多