如何在mysql中获取表中的最大数据而不是重复数据?

时间:2017-07-18 10:07:02

标签: mysql sql mysql-workbench

我的表数据是这样的:

SELECT * FROM t_decorate_car 
WHERE create_time IN 
    (SELECT tmptime FROM
        (SELECT MAX(create_time),tmptime,car_id
         FROM decorate 
         GROUP BY car_id
        ) tmp
    )

我想获得最新数据。这意味着如果有两个相同的car_id,我想根据最新的时间只获得一个。怎么写?

我试着写这个,但我发现它可能是错的。如果其他记录可能具有相同的create_time?如何解决?

string[] files = new string[]{ @"E:\myfile1.txt", @"E:\myfile2.txt", @"E:\myfile3.txt" };

        string fileContent = string.Empty;
        foreach (var fileName in files)
        {
            using (System.IO.StreamReader Reader = new System.IO.StreamReader(fileName))
            {
                fileContent += Reader.ReadToEnd();
            }
        }
        fileContent = fileContent.Replace(',', '.');

        System.IO.File.WriteAllText(@"E:\myfile.txt", fileContent);

1 个答案:

答案 0 :(得分:2)

处理此问题的一种规范方法是将表连接到子查询,该子查询查找每个car_id的最新记录。此子查询用作过滤器,用于删除您不希望看到的旧记录。

SELECT t1.*
FROM t_decorate_car t1
INNER JOIN
(
    SELECT car_id, MAX(create_time) AS max_create_time
    FROM t_decorate_car
    GROUP BY car_id
) t2
    ON t1.car_id      = t2.car_id AND
       t1.create_time = t2.max_create_time

顺便说一下,如果你想继续当前的道路,你也可以使用相关的子查询来解决这个问题:

SELECT t1.*
FROM t_decorate_car t1
WHERE t1.create_time = (SELECT MAX(t2.create_time) FROM t_decorate_car t2
                        WHERE t2.car_id = t1.car_id)

您在正确的轨道上,但您从未使用正确的WHERE子句将子查询连接到主查询。