开发者社区> 问答> 正文

SQL不排序和分组

我正在编写此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

展开
收起
几许相思几点泪 2019-12-26 20:04:31 1105 0
1 条回答
写回答
取消 提交回答
  • 由于您的ORDER语句位于内部子查询中,因此对最终选择具有零影响。

    相反,您应该将ORDER BY语句移到分组语句之外...

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

    2019-12-26 20:04:50
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载