【问题标题】:SQL join that not in grouped date不在分组日期中的 SQL 连接
【发布时间】:2021-01-31 01:44:24
【问题描述】:

我有这个 user_activity 表

user_id   date
1         2020-01-01 08:00:00
2         2020-01-01 08:05:00
1         2020-01-02 08:00:00

和用户表

user_id
1
2
3

我想知道在所有日期都没有活动的用户。像这样

date        user_id
2020-01-01  3
2020-01-02  2
2020-01-02  3

我正在尝试,但不知道如何将其与日期分组

SELECT a.* FROM user_activity a
LEFT OUTER JOIN user u on a.user_id= u.user_id
where a.user_id is null

我已经在寻找答案,但没有分组日期的答案

【问题讨论】:

  • 您如何确定“所有日期”实际上是什么?
  • 包含用户活动的日期
  • 您是指user_activity 表中的所有日期吗?还是每天从同一张桌子上从最早到最后一天?或者你会有一个单独的表格来显示日期?
  • 我的 user_activity 表中的所有日期

标签: mysql sql


【解决方案1】:
SELECT u.user_id, all_dates.date
FROM user u
CROSS JOIN (SELECT DISTINCT DATE(date) as date FROM user_activity) as all_dates
WHERE NOT EXISTS (
  SELECT 1
  FROM user_activity ua
  WHERE ua.user_id = u.user_id
    AND DATE(ua.date) = all_dates.date
)

->

user_id     date
3           2020-01-01
3           2020-01-02
2           2020-01-02

还创建了一个fiddle 供你玩

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    相关资源
    最近更新 更多