mysql - 如何获取第一个用户票证的日期

问题描述 投票:0回答:1

我有一张

tickets
表,其中包含以下信息:

ticket_id    |    user_id   |   used_at
----------------------------------------
xxx          |      xxx     |   datetime
xxx          |      xxx     |   datetime
xxx          |      xxx     |   datetime

我想获取拥有 只有一张门票且其日期为 USED_AT 的所有用户的列表。

我当前的选择工作是为了获取用户和他们的第一张票日期

SELECT
  washtickets.id,
  washtickets.user_id,
  washtickets.used_at
FROM
  washtickets,
  (SELECT user_id, min(used_at) AS used_at FROM washtickets GROUP BY user_id) max_user
WHERE
  washtickets.deleted_at IS NULL
  AND washtickets.user_id = max_user.user_id
  AND washtickets.used_at = max_user.used_at
ORDER BY
  used_at ASC;

但我不知道添加 COUNT(*) 来仅过滤拥有 仅一张已用票的用户。

有什么帮助吗?

mysql select
1个回答
0
投票

First JOINS 是 20 多年来的 SQL 标准,所以请使用它们

Count
是一个聚合函数,所以你需要一个
GROUP BY

不在

GROUP BY
中的所有列都必须具有聚合函数,因为您只希望拥有一张票的人,因此 id 应该只有一个数字,因此聚合函数并不重要。

SELECT
  MIN(w.id),
  w.user_id,
  w.used_at
  
FROM
  washtickets w JOIN
  (SELECT user_id, min(used_at) AS used_at FROM washtickets GROUP BY user_id) max_user
ON
  w.deleted_at IS NULL
  AND w.user_id = max_user.user_id
  AND w.used_at = max_user.used_at
GROUP BY w.user_id, w.used_at
HAVING COUNT(*) = 1
ORDER BY
  used_at ASC;
© www.soinside.com 2019 - 2024. All rights reserved.