【问题标题】:Select first value in column and exclude the rest. DISTINCT for colums?选择列中的第一个值并排除其余值。 DISTINCT 列?
【发布时间】:2016-03-28 21:57:16
【问题描述】:

我试图从频繁向我的 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

【问题讨论】:

标签: mysql sorting


【解决方案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】:

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

【讨论】:

    【解决方案3】:

    如果您使用按时间分组,则 distinct(imei) 没用。它会在不使用 distinct(imei) 的情况下为您提供相同的结果。 在查询中,您使用的是按时间分组,在结果查询中,按时间分组为您提供具有重复 imei 的数据。如果您使用按时间分组,imei 那么它将为您提供不同时间的结果,imei(如果您同时看到两个字段:时间或 imei 将与其他行不同)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 2022-10-09
      • 1970-01-01
      相关资源
      最近更新 更多