在进行执行特定查找的查询时,我有点迷失了。我进行了查询的第一部分,它将返回所有帐户中缺少某些条目的帐户。现在我需要根据他们上次的登录尝试进一步过滤这个子集。
表结构如下:
- users 表包含所有用户信息。我们只关心 project_id 33 下的用户。
- users_account_list 包含用户拥有的所有帐户。我们只关心没有服务 50 条目的用户。
- users_login_logs 包含用户的所有登录尝试。
原来的查询我有这个:
SELECT u.id,
u.login,
u.email,
u.nickname,
b.station_login AS "additionals.station_login",
a.id AS "user_account_list.id",
a.game_id AS "user_account_list.game_id",
a.game_uid AS "user_account_list.game_uid",
c.created_at AS "last login"
FROM users u
LEFT JOIN user_account_list a ON u.id = a.user_id AND a.game_id = 50
LEFT JOIN user_additionals b ON u.id = b.id
LEFT JOIN user_login_logs c ON u.id = c.user_id
WHERE u.project_id = 33
AND u.verified_at IS NOT NULL
AND (a.id IS NULL OR a.game_id IS NULL OR a.game_uid IS NULL)
AND (b.station_login IS NULL OR b.station_login = '')
ORDER BY c.created_at DESC
这将返回所有在 project_id 33 下注册的用户,并且没有 game_id 50 的条目,并且在他们的附加信息表中没有存储任何信息。可选,但不相关,只是限制返回的数据。它确实为每个用户返回了多行,根据他们的最新登录日期排序。
我需要的是让每个用户只返回 1 行以及他们的最新登录日期。我尝试用 u.id 的 GROUP 替换 ORDER BY但这给了我最旧的结果,而不是最新的。
我怎样才能:
- 将返回的行限制为每个用户仅 1 行
- 确保该行基于用户的最新登录尝试。
编辑:
这是查询当前返回的内容:
+----+-------+-----------------+----------+---------------------------+----------------------+---------------------------+----------------------------+---------------------+
| id | login | email | nickname | additionals.station_login | user_account_list.id | user_account_list.game_id | user_account_list.game_uid | last login |
+----+-------+-----------------+----------+---------------------------+----------------------+---------------------------+----------------------------+---------------------+
| 1 | usrnm | someon@mail.com | Nickname | | NULL | NULL | NULL | 2012-10-19 00:00:00 |
| 1 | usrnm | someon@mail.com | Nickname | | NULL | NULL | NULL | 2012-10-18 00:00:00 |
| 1 | usrnm | someon@mail.com | Nickname | | NULL | NULL | NULL | 2012-10-17 00:00:00 |
+----+-------+-----------------+----------+---------------------------+----------------------+---------------------------+----------------------------+---------------------+
3 rows in set (0.08 sec)