我正在编写此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语句移到分组语句之外...
我必须质疑为什么您要使用子查询,使用select *并GROUP BY会从组中返回一条记录是正确的,在其他RDBMS中,这种类型的查询无效,我们必须指定要返回的特定字段,包括任何聚合表达式,用于不属于分组语句的列。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。