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