我在理解如何最好地处理这个问题时遇到了问题。
我有一张叫user_files的桌子。一个用户可以有许多文件。我想要获取在过去一年中没有修改过任何文件的用户列表。如果用户在过去一年中至少修改了一个文件,则应排除该用户。
Table: user_files
file_id | user_id | date_modified
----------------------------------
1 100 2010-10-01
2 100 2010-11-13
3 100 2011-01-01
4 101 2010-10-01
5 101 2010-06-13
6 101 2011-04-12
7 101 2012-04-01预期的结果将只列出user_id 100。
下面是我使用过的一些糟糕的sql。我的想法是找到最近修改其文件的所有用户,然后找到未包括在该列表中的用户。
select user_id from users where user_id not in
(
select user_id from
(
select user_id, story_id, max(date_modified) from user_files
where DATE_FORMAT(date_modified, '%Y-%m-%d') >= DATE_SUB(curdate(), INTERVAL 1 YEAR)
group by user_id
)x
)谢谢
发布于 2012-07-13 02:58:03
SELECT DISTINCT(f.user_id)
FROM user_files f
WHERE NOT EXISTS(SELECT 1
FROM user_files ff
WHERE ff.user_id = f.user_id
AND ff.date_modified >= DATE_SUB(curdate(), INTERVAL 1 YEAR))http://sqlfiddle.com/#!2/64e7f/1
或,
SELECT user_id
FROM user_files
GROUP BY user_id
HAVING MAX(date_modified) < DATE_SUB(curdate(), INTERVAL 1 YEAR)发布于 2012-07-13 02:57:43
您可以使用这个简单的解决方案:
SELECT a.user_id
FROM users a
LEFT JOIN user_files b ON
a.user_id = b.user_id AND
b.date_modified >= CURDATE() - INTERVAL 1 YEAR
WHERE b.user_id IS NULLhttps://stackoverflow.com/questions/11458664
复制相似问题