Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中的GROUPBY:如何指定从其他列显示哪些数据_Mysql - Fatal编程技术网

MySQL中的GROUPBY:如何指定从其他列显示哪些数据

MySQL中的GROUPBY:如何指定从其他列显示哪些数据,mysql,Mysql,对不起,标题不明确;但我现在不知道该如何描述它 我有下表: imei | date | time | some more fields 345 | 2012-06-28 | 07:18 | ..... 345 | 2012-06-28 | 07:20 | ..... 345 | 2012-06-28 | 07:21 | ..... 987 | 2012-06-28 | 07:19 | ..... etc etc 我想获取最新一行的eVERY distinct imei,因

对不起,标题不明确;但我现在不知道该如何描述它

我有下表:

imei | date       | time  | some more fields
345  | 2012-06-28 | 07:18 | .....
345  | 2012-06-28 | 07:20 | .....
345  | 2012-06-28 | 07:21 | .....
987  | 2012-06-28 | 07:19 | .....
etc etc
我想获取最新一行的eVERY distinct imei,因此:

345  | 2012-06-28 | 07:21
987  | 2012-06-28 | 07:19
  • 使用imei从t组中选择*将导致使用第一行而不是最后一行
  • 时间排序
    显然是对结果关系而不是子关系排序
  • 使用have只是为了说明一个条件

如何编写查询来完成此操作?

也许您应该同时按
imei
date
时间下单:

SELECT * FROM t GROUP BY imei ORDER BY imei, date DESC, time DESC
如下列文件所述:

服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的。此外,不能通过添加
ORDER by
子句来影响每组值的选择。结果集的排序发生在选择值之后,并且
orderby
不会影响服务器选择的值

要获得(如您所需),您需要将分组子查询的结果与表连接起来:

SELECT * FROM t JOIN (
  SELECT imei, MAX(ADDTIME(date, time)) AS dt FROM t GROUP BY imei
) AS u ON t.imei = u.imei AND t.date = DATE(u.dt) AND t.time = TIME(u.dt)

法希姆是对的。分开的日期和时间栏使生活变得不必要的困难。没关系

试试这个

SELECT IMEI, MAX(STR_TO_DATE(CONCAT(`date`,` `,'`time`)))
  FROM T
 GROUP BY IMEI
您可能需要费尽周折才能获得正确的MAX/STR/CONCAT表达式


这是一个摘要查询,用于查找每个IMEI项的最长日期时间。

请查看该帖子:

为此,您只需使用SQL语句:

SELECT imei, (date+time) AS datim, [some more fields] FROM yourTable;

然后您可以在虚拟字段datim上使用max、min和distinct。

为什么将日期和时间作为单独的列??如果有一列的时间戳为数据类型,则可以完成此工作。。。