【发布时间】:2012-08-01 07:37:43
【问题描述】:
我从以下查询中得到以下结果:
SELECT users.ID, user_registered, post_date, post_type
FROM users LEFT OUTER JOIN posts ON users.ID = post_author
ORDER BY ID, user_registered, post_date, post_type
ID user_registered post_date post_type
---+-----------------+------------------+--------------+
1 6/18/2012 4:04 6/18/2012 4:04 page
1 6/18/2012 4:04 6/18/2012 4:04 post
1 6/18/2012 4:04 6/18/2012 10:32 nav_menu_item
1 6/18/2012 4:04 6/18/2012 10:32 nav_menu_item
1 6/18/2012 4:04 6/18/2012 10:32 nav_menu_item
1 6/18/2012 4:04 6/18/2012 10:32 nav_menu_item
1 6/18/2012 4:04 6/18/2012 10:32 nav_menu_item
1 6/18/2012 4:04 6/18/2012 10:33 nav_menu_item
1 6/18/2012 4:04 6/18/2012 10:48 attachment
1 6/18/2012 4:04 6/19/2012 10:32 attachment
1 6/18/2012 4:04 6/30/2012 6:49 nav_menu_item
1 6/18/2012 4:04 6/30/2012 7:04 nav_menu_item
1 6/18/2012 4:04 7/1/2012 7:39 attachment
1 6/18/2012 4:04 7/13/2012 10:00 page
1 6/18/2012 4:04 7/20/2012 18:18 page
1 6/18/2012 4:04 7/21/2012 16:37 post
1 6/18/2012 4:04 7/23/2012 14:15 page
1 6/18/2012 4:04 7/31/2012 15:12 post
1 6/18/2012 4:04 8/1/2012 8:47 attachment
2 6/19/2012 10:05 NULL NULL
6 6/29/2012 4:47 6/19/2012 10:11 attachment
6 6/29/2012 4:47 6/19/2012 10:15 attachment
6 6/29/2012 4:47 6/19/2012 10:17 attachment
6 6/29/2012 4:47 6/19/2012 10:20 attachment
6 6/29/2012 4:47 6/19/2012 10:22 attachment
6 6/29/2012 4:47 6/28/2012 0:00 employee
6 6/29/2012 4:47 6/29/2012 0:00 employee
6 6/29/2012 4:47 8/1/2012 0:00 employee
6 6/29/2012 4:47 8/2/2012 0:00 employee
6 6/29/2012 4:47 8/2/2012 0:00 employee
6 6/29/2012 4:47 8/2/2012 0:00 employee
7 7/7/2012 16:52 7/31/2012 14:26 post
20 7/21/2012 14:48 7/21/2012 21:53 post
20 7/21/2012 14:48 7/22/2012 12:50 post
21 7/27/2012 14:56 NULL NULL
-
ID:用户 ID。唯一的主键 -
user_registered: 用户加入网站的日期时间 -
post_date: 用户创建帖子的日期时间 -
post_type:用户创建的帖子类型- 我需要获取自用户上次发布
employee帖子以来的天数(post_date其中post_type = 'employee')。 - 如果用户尚未发布
employee帖子,那么我需要获取自用户注册 (user_registered) 以来的天数。
- 我需要获取自用户上次发布
要求
我只需要获取所有用户的ID
- 其最新的
employee发布日期是例如< 7days 或>= 14days,或BETWEEN 6 AND 14根据需要;或 - 如果用户没有
employee帖子,则获取注册< 7days 或>= 14days 或BETWEEN 6 AND 14的用户,如#1。
我针对< 7 案例尝试了以下查询:
SELECT users.ID
FROM users LEFT OUTER JOIN posts ON users.ID = post_author
GROUP BY ID
HAVING MIN(DATEDIFF(NOW(), IFNULL(post_date, user_registered))) < 7
它会按预期产生IDs 1、6 和 7,因为:
- 拥有
employee帖子的用户(6)没有其他post_types 的任何其他帖子;和 - 没有
employee帖子的用户 (1, 7) 从他们的user-registered日期得到他们的计算。
但是当这个查询中断时
- 拥有
employee帖子的用户还拥有其他post_types
因为我无法将日期计算限制为仅限 employee post_type 的帖子。如果用户有post 或page 或attachment,也就是说,比他最近的employee 晚2 天,则日期计算将返回post 或page 的结果或attachment。
所以我尝试包含WHERE post_type = 'employee',但只返回了ID 6,因为所有其他用户都没有employee 帖子。所以我失去了我的第二个要求。
我该怎么做?提前致谢。
【问题讨论】:
标签: mysql datetime join where-clause having