Mysql SQL不进行排序和分组

Mysql SQL不进行排序和分组,mysql,sql,mariadb,greatest-n-per-group,Mysql,Sql,Mariadb,Greatest N Per Group,我写这个SQL查询是为了检测最近登录系统的用户。到目前为止,我的问题是: SELECT * FROM ( SELECT * FROM events WHERE eventName = 'Login' ORDER BY eventID DESC ) AS SUBQUERY GROUP BY personID; 这是我试图阅读的原始表格: +---------+----------+-----------+--------------+--------------------------

我写这个SQL查询是为了检测最近登录系统的用户。到目前为止,我的问题是:

SELECT * FROM (
    SELECT * FROM events WHERE eventName = 'Login' ORDER BY eventID DESC
) AS SUBQUERY 
GROUP BY personID;
这是我试图阅读的原始表格:

+---------+----------+-----------+--------------+----------------------------+
| eventID | personID | eventName | eventContent | timeStamp                  |
+---------+----------+-----------+--------------+----------------------------+
|       1 |        2 | Login     | Login        | On: 26/12/2019 at 16:53:34 |
|       2 |        2 | Click     | Button       | On: 26/12/2019 at 16:53:42 |
|       3 |        1 | Login     | Login        | On: 26/12/2019 at 16:53:43 |
|       4 |        1 | Login     | Login        | On: 26/12/2019 at 16:59:22 |
|       5 |        0 | Login     | Login        | On: 26/12/2019 at 17:4:34  |
|       6 |        1 | Login     | Login        | On: 26/12/2019 at 17:5:6   |
+---------+----------+-----------+--------------+----------------------------+

我期望的输出:

ID  Login Time
1   On: 26/12/2019 at 17:5:6
0   On: 26/12/2019 at 17:4:34
2   On: 26/12/2019 at 16:53:34
输出SQL为我提供了:

ID  Login Time
0   On: 26/12/2019 at 17:4:34
1   On: 26/12/2019 at 16:53:43
2   On: 26/12/2019 at 16:53:34


因为您的
ORDER
语句位于内部子查询上,所以它对最终选择有零影响

相反,您应该将
ORDER BY
语句移动到grouping语句的外部


我不得不质疑为什么要使用子查询,使用
select*
groupby
将从组中返回一条记录是正确的,在其他RDBMS中,这种类型的查询无效,我们必须指定要返回的特定字段,包括用于不属于分组语句一部分的列的任何聚合表达式

我知道您需要最新的
登录时间
per
ID

仅涉及两列,就可以使用聚合:

select personID ID, max(timestamp) LoginTime from mytable group by personID
如果出于某种原因需要表中的更多列,则可以使用相关子查询进行筛选:

select t.*
from mytable t
where t.timestamp = (
    select max(t1.timestamp) from mytable t1 where t1.personID = t.personID
)

找出您正在使用的RDBMS,然后看到您应该包含一些示例数据以及您期望的结果,选择*是非常危险的,尤其是在我们不了解您的方案的论坛中,如果您的示例数据代表您的实际数据,您就更有可能获得可用的答案。由于示例不包含eventName、eventID或personid列,并且发布的日期不是mysql日期格式,它们是文本吗?我从头开始编辑了这个问题,以解释最好的结果。查看修改后的问题@chrisschaller我从头开始编辑了这个问题,以解释最好的问题。查看修改后的quesion@P.salmoni如果提供了更多信息,包括预期输出是什么,我可以更新此解决方案以包含SQL语句,但如果没有更多信息,我无法轻松猜出有助于OP的正确语法。请稍等,我会告诉您这些信息!在我将时间戳更改为更合适的格式后,您的解决方案成功了!