在列中选择第一个值并排除其余值。 colles的DISTINCT?

时间:2015-12-22 15:28:22

标签: mysql sorting

我试图从频繁级别将数据发送到我的MYSQL数据库的单位中的数字中挑选出我的最新值。

我得到了几个数据点并希望显示其中一些。按日期排序,因此我只获得每个单元的最新版本。我使用每个单位的mu IMEI编号作为id,并希望从它们中排序。

我的问题是,当我按顺序排序整个数据集时,我希望我不能排除其余的数据。使用DISTINCT时,我无法获得uniq行。因为我的时间戳或多或少都是独一无二的。

这是我目前正在使用的查询。

"SELECT DISTINCT(imei), imsi, battery, charging, time, median, latitude, longitude FROM {$table} GROUP BY time desc"

我如何对此进行排序,以便我的最新imei出现。不包括其余的?

我一直在尝试DISTINCT,TOP,使用HAVING和不同类型的WHERE的一些例子,但没有任何成功。

我可以在哪里获得有关此问题的更多知识以及如何解决问题的提示和技巧?

这是我目前从查询中获得的最佳结果。

imei    imsi    battery charging    time    median  latitude    longitude
355675061138699 9240075810046549    33  1   2015-12-21 14:17:41 301 61 29.8763  16 20.9981
355675061138699 9240075810046549    33  1   2015-12-21 14:16:26 300 61 29.8763  16 20.9981
355675061138699 9240075810046549    33  1   2015-12-21 14:15:10 301 61 29.8763  16 20.9981
355675061138699 9240075810046549    33  1   2015-12-21 14:13:53 301 61 29.8763  16 20.9981
355675061138699 9240075810046549    33  1   2015-12-21 14:12:38 299 61 29.8763  16 20.9981
355675061138699 9240075810046549    0   1   2015-12-21 14:11:22 301 61 29.8763  16 20.9981

3 个答案:

答案 0 :(得分:1)

如果您希望表格中最近插入的条目,您可以随时使用     SELECT * FROM table WHERE id = (SELECT MAX(id) from table)

答案 1 :(得分:1)

一种方法是使用相关子查询:

SELECT imei, imsi, battery, charging, time, median, latitude, longitude
FROM {$table} t
WHERE time = (SELECT MAX(t2.time)
              FROM {$table} t2
              WHERE t2.imei = t.imei
             )
ORDER BY time desc;

为获得最佳性能,您需要(imei, time)上的索引。和(time)

答案 2 :(得分:0)

如果您按时间使用分组,那么distinct(imei)就没用了。它会在不使用distinct(imei)的情况下给你相同的结果。这里在查询中你正在按时间使用,在结果查询中按时间给你重复的imei数据组。如果你按时间使用imei,那么它会给你带来不同时间的结果,imei(如果你看到两个字段:时间或imei与其他行不同)。